【发布时间】:2018-09-22 04:12:31
【问题描述】:
像下面这样简单地编写 C 文件:
int main()
{
int a = 999;
return 0;
}
使用gcc编译链接后,会生成一个可执行文件(如.exe、.out)
但是当我用一些编辑器打开(不运行)可执行文件时,我找不到变量“a”的值,即数字 999,十六进制为 0x3E7。
我的问题是:
- 变量号999是否存在于可执行文件中?
- 如果不是,变量号存储在哪里?运行中的可执行文件如何获取变量号?
P.S:我对 .data .bss .text .etc 和汇编语言等内存部分有一点了解。甚至我使用 ollydbg 都找不到。
【问题讨论】:
-
您是否在编译时进行了优化?
-
@Michael Petch 我使用 gcc -O1 a.c
-
这就是原因。通过对编译器进行优化(即使使用
-O1),编译器已经确定,由于您创建了一个从未使用过的变量,因此它可以完全删除它。尝试在没有优化的情况下构建 (-O0)。 -
如果我是你,我会将 C 代码编译为程序集(选项
-S)。然后我会查看 gcc 生成的汇编文件。 -
如果曾经存储在可执行文件中,在 little-endian 上不会是 0xE7 0x03 吗?
标签: c gcc assembly exe compiler-optimization