我试图围绕程序内存在运行时分配的方式以及程序的不同部分或“段”(如果这是正确的单词)。我几乎在那里,但不是很好,可以使用一点帮助。
我知道该程序包含一个.data节,包含初始化全局变量的只读和读写内存。我知道.bss部分用于未初始化的全局变量和静态变量,并且是可读写的。我理解堆和堆栈。
以下问题说明了我的困惑:
非常感谢任何帮助。
答案 0 :(得分:2)
.rodata
用于只读数据,又称常量和文字,请参阅this。
根据this,.data?
用于未初始化的数据,又称.bss
部分数据,.data
用于初始化数据。
根据Windows PE format,您永远不能假设某些部分存在及其顺序(因为它们表明它是编译器定义的)。但是,它具有.data
和.code
的标准,但仍然应该始终检查PE,这就是它的原因。
这是通过PE部分标题完成的,因为它是特定于操作系统的(或特定于PE:win,elf或mach-o),请参阅here部分的段落,特别是{{部分描述符的字段(同样适用于Windows ,您需要使用所选操作系统的PE布局)。