当我们假设整个程序(以及所有相关的 .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/