【发布时间】:2010-10-18 17:14:54
【问题描述】:
我知道何时访问堆栈帧的内存将通过使用堆栈帧指针来完成,但我想知道如何通过使用指针来访问数据、包含全局/静态数据的 BSS 段堆栈帧指针指示这些段的起始点或指令直接寻址这些段的片段,以便每次应用程序启动时系统都必须在文本段中写入指令的地址部分?
【问题讨论】:
标签: c++ compiler-construction global-variables instructions
我知道何时访问堆栈帧的内存将通过使用堆栈帧指针来完成,但我想知道如何通过使用指针来访问数据、包含全局/静态数据的 BSS 段堆栈帧指针指示这些段的起始点或指令直接寻址这些段的片段,以便每次应用程序启动时系统都必须在文本段中写入指令的地址部分?
【问题讨论】:
标签: c++ compiler-construction global-variables instructions
虚拟内存意味着这些段总是出现在虚拟地址空间中的相同位置,因此它们的地址可以硬编码到可执行代码中。
(注意,ASLR 不是这样)。
【讨论】:
您可以使用__attribute__ ((section ("BSS"))) 声明一个全局变量
并获取变量的地址。
Take a look at the Gcc documentation
你也可以声明一个未初始化的静态变量并获取它的地址。
【讨论】: