在 elf 文件中查找全局变量的位置

Find location of global variable in elf file

我想编写一个可以找到全局变量位置的 C++ 程序。 这是相关的readelf

...
 <1><98>: Abbrev Number: 7 (DW_TAG_variable)
    <99>   DW_AT_name        : (indirect string, offset: 0x32): sbox_bit
    <9d>   DW_AT_decl_file   : 1
    <9e>   DW_AT_decl_line   : 3
    <9f>   DW_AT_type        : <0x81>
    <a3>   DW_AT_external    : 1
    <a3>   DW_AT_location    : 5 byte block: 3 e8 0 1 0     (DW_OP_addr: 100e8)
...

我已经得到了标签 "DW_TAG_variable" 和 dwarf_diename "sbox_bit" 的 DIE。从这里找到这个变量的位置应该不难,但我想不通。

I want to write a c++ program that can find the location of a global variable.

你是"holding it wrong".

虽然可以从调试信息(您提供的 readelf 输出)中找到全局变量的位置(以及它的类型、大小、元素数量(如果是数组)等) ),从符号 table(即 nm 的输出)找到该地址要简单得多

可以使用 libelf, or just manually (if your host matches the target, it's quite easy to do). 解析符号 table。