c - 在 Linux 上自己的进程上读取调试/静态符号,而没有 C/Linux 中的磁盘 I/O?

标签 c linux symbols debug-symbols ldd

当我们假设整个程序(以及所有相关的 .so 文件)已被删除时,是否可以使用某些 API 通过地址读取自己的符号名称?

我发现了一些如何使用 objdump 、 readelf 、 nm 等获取此信息的方法,但不是一个选项。

我想要一个函数string get_symbol_at(uint64_t addr)

最佳答案

ELF 文件中的静态/调试符号以 DWARF 格式编码。可以通过分析调试信息来发现它们。但是,所有 .debug_* 部分似乎都只是被操作系统( see )未加载,因为它们非常大并且对于程序执行毫无用处(它们变得有用)仅在程序调试时)。

所以,答案是:当需要调试符号时,必须通过自己的力量从磁盘读取可执行文件。

关于c - 在 Linux 上自己的进程上读取调试/静态符号,而没有 C/Linux 中的磁盘 I/O?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59480646/

相关文章:

linux - Oracle Client for Console 屏幕

用于查找特定单词并查找其在特定日期出现的次数的 Linux 命令

javascript - 在 ES6 中,如何覆盖父类(super class)中的私有(private)方法?

r - R中的意外符号请参阅代码

java - 如何修复我的程序的 "cannot find symbol error"?

c++ - NCurses – getstr() 和功能键

c - 双重释放或腐败(!prev)

c - 使用 pthreads 的 C 中的读取器/写入器问题

linux - pdf = rs.getBytes ("pdf");它在 Windows 操作系统中不起作用。从 postgres bytea 字段读取二进制数据的替代方法是什么

c - 在内核空间将__be32 ip地址转换为char的方法