可执行文件中的C语言变量

suo*_*ong 0 c assembly gcc exe compiler-optimization

简单编写C文件如下:

int main()
{
    int a = 999;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在使用gcc编译和链接之后,它将生成一个可执行文件(例如.exe,.out)

但是当我用某个编辑器打开(NOT RUNNING)可执行文件时,我找不到变量'a'的值,以十六进制表示的数字999是0x3E7.

我的问题是:

  • 变量编号999是否存在于可执行文件中?
  • 如果不是,变量号存储在哪里?可执行文件如何在运行中获取变量号?

PS:我对.data .bss .text .etc和汇编语言等内存部分有一点了解.我甚至无法使用ollydbg找到它.

Swo*_*ish 5

编译器没有理由将值999放在任何地方,因为它没有在任何地方使用.无论999是否在内存中,程序都具有相同的可观察行为.

ISO/IEC 9899:TC2 - 5.1.2.3程序执行:

  1. 在抽象机器中,所有表达式都按语义指定进行计算.实际实现不需要评估表达式的一部分,如果它可以推断出它的值未被使用并且不产生所需的副作用(包括由调用函数或访问易失性对象引起的任何副作用).