在 C/Linux 中没有磁盘 I/O 的 linux 上自己的进程读取 debug/static 符号?
read debug/static symbols when on own process on linux without disk I/O in C/Linux?
当我们假设整个程序(以及所有相关的 .so 文件)已被删除时,是否可以使用一些 API 通过它的地址读取自己的符号名称?
我找到了一些如何使用 objdump
、readelf
、nm
等获取此信息的文章,但不是一个选项。
我想要的是一个函数 string get_symbol_at(uint64_t addr)
。
ELF 文件中的 static/debug 符号以 DWARF
格式编码。可以通过分析调试信息发现它们。然而,所有 .debug_*
部分似乎只是 未加载 操作系统 (see),因为它们非常大并且对程序执行无用(它们变得有用仅在调试程序时)。
所以,答案是:当需要调试符号时,必须通过自己的力量从磁盘读取可执行文件。
当我们假设整个程序(以及所有相关的 .so 文件)已被删除时,是否可以使用一些 API 通过它的地址读取自己的符号名称?
我找到了一些如何使用 objdump
、readelf
、nm
等获取此信息的文章,但不是一个选项。
我想要的是一个函数 string get_symbol_at(uint64_t addr)
。
ELF 文件中的 static/debug 符号以 DWARF
格式编码。可以通过分析调试信息发现它们。然而,所有 .debug_*
部分似乎只是 未加载 操作系统 (see),因为它们非常大并且对程序执行无用(它们变得有用仅在调试程序时)。
所以,答案是:当需要调试符号时,必须通过自己的力量从磁盘读取可执行文件。