在 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。
我想编写一个可以找到全局变量位置的 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).