我知道当访问堆栈帧的内存时,它将通过使用堆栈帧指针来完成,但我想知道如何通过使用像堆栈帧这样的指针来访问数据、包含全局/静态数据的 BSS 段指示这些段起始点的指针或直接寻址这些段的指令,以便每次应用程序启动时系统都必须在文本段中写入指令的地址部分?
虚拟内存意味着这些段始终出现在虚拟地址空间中的同一位置,因此它们的地址可以硬编码到可执行代码中。
(请注意,这对于 ASLR 来说并非如此)。
您可以使用
__attribute__ ((section ("BSS")))
您还可以声明一个未初始化的静态变量并获取其地址。