Windows 找出模式以便在编译程序中找到变量

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>:

我需要从编译的c程序中提取全局变量。我现在正在做的是使用Linux readelf命令来获取这些信息。换句话说,当我这样做时:

  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调试信息格式的更简单说明,请参见