检查可执行文件中的变量
有没有办法通过查看可执行文件来知道变量是否已定义。
假设我
int i;
在主函数中声明。通过编译和链接,我得到了一个可执行文件 my_program.exe。
现在,通过查看 my_program.exe 内部,我可以判断它是否有 int eger 变量 i 吗?
Is there a way to know whether a variable is defined, by looking at the executable.
Lets say I declare
int i;
in the main function. By compiling and linking I get an executable my_program.exe.
Now, by looking inside my_program.exe, can I say if it has an int eger variable i ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
除非您在启用调试的情况下进行编译,否则不会。
Not unless you compile with debugging enabled.
正如其他人所说,调试信息会显示它。更具体地说,对于 ELF 文件:
将具有如下条目:
没有调试信息,本地人不会保留其名称。如果该变量是全局变量,则会有一个符号指向它:
类型信息丢失,但您可以看到大小为 4
As others said, debugging information will show it. More specifically, for ELF files:
will have an entry like:
Without debugging information, locals don't retain their names. If the variable is a global, there will be a symbol that points to it:
Type information is lost there, but you can see the size is 4
如果使用调试符号(例如 gcc -g)进行编译,则可以使用调试器查看几乎所有内容。
If you compile with debugging symbols (for example, gcc -g) you can then use your debugger to see pretty much everything.
局部变量在优化过程中可能会被编译器消除,因此即使使用调试符号也很难找到变量的初始值。但这是特定于平台的。
Local variables could be eliminated by the compiler during optimization process, so the initial value of variables will be hard to find out even with debugging symbols. That is platform specific though.