我正在开发一个项目,我们的验证测试脚本需要在被测软件的构建中定位符号地址。这可能用于设置断点或从内存中读取静态数据。我所追求的是创建一个包含符号名称、内存中的基地址和大小的映射文件。我们的构建输出一个 ELF 文件,其中包含我想要的信息。我一直在尝试使用readelf、nm 和 objdump工具来尝试并获得我需要的符号地址。
我最初尝试过readelf -s file.elf
,这似乎可以访问一些符号,尤其是那些用汇编程序编写的符号。然而,我想要的许多符号都不在那里——特别是那些源自我们的 Ada 代码的符号。
我曾经readelf --debug-dump file.elf
转储所有调试信息。从中我确实看到了所有符号,包括 Ada 代码中的符号。但是,格式似乎是 DWARF 格式。当我要求它列出符号信息时,有谁知道为什么 readelf 不会输出这些符号?也许我只是缺少一个选项。
现在我可以编写一个自定义 DWARF 解析器来获取信息,但如果我可以使用 Binutils(nm、readelf、objdump)之一来获取它,那么我真的更喜欢标准解决方案。