【发布时间】:2019-02-16 02:11:10
【问题描述】:
据我所知,当我声明全局变量int my_var;时,
它位于<bss>(未初始化的全局数据)或<.rodata>(初始化全局数据)部分的固定地址。
例如)
int my_var; // <= It is at <.bss> section
int my_var = 0x1337; // <= It is at <.rodata> section
所以,程序可以使用固定地址找到那些静态值。
问题:但是,我听说全局变量位于<stack>。
C运行时启动初始化全局变量:__environ,program_invocation_name
它们位于<stack>....,这意味着它的地址不固定。
问题。程序如何在stack(非固定区域)中找到全局变量?
【问题讨论】:
-
如您所见,全局变量并不存储在堆栈中。如果是,第一个问题是:哪个堆栈,因为每个线程都有自己的专用堆栈分配给它。
-
为什么同一个主题有两个不同的问题? stackoverflow.com/questions/52275427/…
-
int my_var = 0x1337;不能进入.rodata,除非它是const,否则会导致my_var++段错误。它实际上会进入.data。
标签: assembly x86 binary stack global-variables