Windows 找出模式以便在编译程序中找到变量
我需要从编译的c程序中提取全局变量。我现在正在做的是使用Linux readelf命令来获取这些信息。换句话说,当我这样做时:Windows 找出模式以便在编译程序中找到变量,windows,dwarf,readelf,debug-information,Windows,Dwarf,Readelf,Debug Information,我需要从编译的c程序中提取全局变量。我现在正在做的是使用Linux readelf命令来获取这些信息。换句话说,当我这样做时: readelf.exe -w[i] myFile.out 我使用readelf.exe一个可以从下载的程序来实现这一点。因为我使用的是windows,这是我唯一需要的命令。在linux上,我只需打开控制台并执行readelf-w[I]myFile.out 不管怎样,当我执行该命令时,我得到如下结果: <1><86923>:
readelf.exe -w[i] myFile.out
我使用readelf.exe
一个可以从下载的程序来实现这一点。因为我使用的是windows,这是我唯一需要的命令。在linux上,我只需打开控制台并执行readelf-w[I]myFile.out
不管怎样,当我执行该命令时,我得到如下结果:
<1><86923>: Abbrev Number: 2 (DW_TAG_base_type)
<86924> DW_AT_name : unsigned int
<86925> DW_AT_encoding : 7 (unsigned)
<86927> DW_AT_byte_size : 4
<1>..
...
... bla bla bla
...
<1><870a1>: Abbrev Number: 12 (DW_TAG_variable)
<870a2> DW_AT_decl_file : 25
<870a3> DW_AT_decl_line : 543
<870a5> DW_AT_external : 1
<870a6> DW_AT_name : NetBuf_ID_Ctr // <------------------- First variable
<870b4> DW_AT_type : <0x86923>
<870b8> DW_AT_location : 5 byte block: 3 ff f9 b 20 (DW_OP_addr: fff90b20)
<1><870be>: Abbrev Number: 3 (DW_TAG_typedef)
<870bf> DW_AT_decl_file : 26
<870c0> DW_AT_decl_line : 192
<870c2> DW_AT_name : NET_CONN_FAMILY
<870d2> DW_AT_type : <0x862f1>
<1><870d6>: Abbrev Number: 3 (DW_TAG_typedef)
<870d7> DW_AT_decl_file : 26
....
:缩写编号:2(DW\U标签\U基本类型)
DW_AT_name:unsigned int
DW_AT_编码:7(无符号)
字节大小为4的数据仓库
..
...
... 呜呜呜呜
...
:Abbrev编号:12(DW_标记_变量)
数据文件:25
德克卢线的德瓦卢:543
DW_在_外部:1
DW_AT_name:NetBuf_ID_Ctr/基本上,ELF对象文件中的dwarf调试信息驻留在节中
- .debug_aranges
- .debug_帧
- .debug_信息
- .debug_行
- .debug_pubnames
- .debug_pubType
模具树是通过解析.debug_info中的信息构建的,该信息描述了调试信息条目(模具)之间的关系。DWARF标准中描述了该信息的存储方式
从你的问题来看,似乎你想尽快抛售所有的全球符号。
如果要从自己的程序中执行此操作,可以使用解析.debug_pubnames的内容。本节包含多组标头,后跟多个名称、偏移量对。名称是全局名称,偏移量是模具从编译单元开始的偏移量。libdwarf可以再次使用它来获取更详细的信息
libdwarf可以很容易地在windows上编译,但您也需要libelf。
有关DWARF调试信息格式的更简单说明,请参见