程序存储器分配

时间:2012-01-17 09:22:13

标签: memory assembly

我试图围绕程序内存在运行时分配的方式以及程序的不同部分或“段”(如果这是正确的单词)。我几乎在那里,但不是很好,可以使用一点帮助。

我知道该程序包含一个.data节,包含初始化全局变量的只读和读写内存。我知道.bss部分用于未初始化的全局变量和静态变量,并且是可读写的。我理解堆和堆栈。

以下问题说明了我的困惑:

  1. 什么是.rodata部分以及它存在于哪里?
  2. .data怎么样? MASM中的部分与.data部分不同?
  3. 每个程序都必须具有标准的.data,.bss,.code部分, 或者这些惯例只是指导原则吗?
  4. 什么决定哪些部分是可读,可写和可执行的?
  5. 非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

  1. .rodata用于只读数据,又称常量和文字,请参阅this

  2. 根据this.data?用于未初始化的数据,又称.bss部分数据,.data用于初始化数据。

  3. 根据Windows PE format,您永远不能假设某些部分存在及其顺序(因为它们表明它是编译器定义的)。但是,它具有.data.code的标准,但仍然应该始终检查PE,这就是它的原因。

  4. 这是通过PE部分标题完成的,因为它是特定于操作系统的(或特定于PE:win,elf或mach-o),请参阅here部分的段落,特别是{{部分描述符的字段(同样适用于Windows ,您需要使用所选操作系统的PE布局)。