检查可执行文件中的变量

问题描述 投票:0回答:4

有没有办法通过查看可执行文件来知道变量是否已定义。

假设我声明

int i;

在主函数中。通过编译和链接,我得到了一个可执行文件 my_program.exe。

现在,通过查看 my_program.exe 内部,我可以判断它是否有一个 int eger 变量 i

c++ c linker executable
4个回答
3
投票

除非您在启用调试的情况下进行编译,否则不会。


2
投票

正如其他人所说,调试信息会显示它。更具体地说,对于 ELF 文件:

readelf -w binary-name

将有一个条目,例如:

<2><58>: Abbrev Number: 4 (DW_TAG_variable)
 <59>     DW_AT_name        : i 
 <5b>     DW_AT_decl_file   : 1 
 <5c>     DW_AT_decl_line   : 2 
 <5d>     DW_AT_type        : <73>  
 <61>     DW_AT_location    : 2 byte block: 91 6c   (DW_OP_fbreg: -20)

没有调试信息,当地人不会保留他们的名字。如果变量是全局变量,会有一个符号指向它:

objdump -t binary-name

0804a010 g     O .data  00000004              i

类型信息丢失,但您可以看到大小是 4


1
投票

如果使用调试符号(例如 gcc -g)进行编译,则可以使用调试器查看几乎所有内容。


0
投票

局部变量在优化过程中可能会被编译器消除,因此即使使用调试符号也很难找到变量的初始值。但这是特定于平台的。

© www.soinside.com 2019 - 2024. All rights reserved.