在elf文件中,如何找到变量定义在哪个编译单元?

In an elf file, how to find which compile unit the variable is defined?

我正在写一个工具来向a2l文件添加变量,输入是elf文件。 为了搜索哪个编译单元 (CU) 具有变量,我必须搜索所有 CU(直到遇到变量)。 因为SW很大,找一个变量需要时间。 我想知道是否有任何更快的方法来知道变量定义在哪个 CU?

DWARF 标准包括 可选 部分 .debug_pubnames,它为 全局 对象提供 name-to-offset 翻译和功能。

另一种方法是使用符号table。如果它有一个变量条目,那么您可以将其地址与 optional .debug_aranges 部分一起使用,或者,如果失败,请阅读每个 DW_TAG_compile_unit 以查找带有封闭的地址范围。