Memory 程序内存分配

Memory 程序内存分配,memory,assembly,Memory,Assembly,我正试图了解程序内存在运行时的分配方式以及程序的不同部分(如果这是正确的话)。我快到了,但还不完全到,需要一点帮助 我知道该程序包含一个.data部分,其中包含初始化全局变量的只读和读写内存。我知道.bss部分用于未初始化的全局变量和静态变量,并且是读写的。我了解堆和堆栈 以下问题说明了我的困惑: 什么是.rodata部分?它存在于哪里 数据是如何生成的?MASM中的节与.data节不同 是否每个程序都必须有标准的.data、.bss、.code节, 或者这些公约仅仅是指导方针 什么决定了哪些部

我正试图了解程序内存在运行时的分配方式以及程序的不同部分(如果这是正确的话)。我快到了,但还不完全到,需要一点帮助

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

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

  • 什么是.rodata部分?它存在于哪里
  • 数据是如何生成的?MASM中的节与.data节不同
  • 是否每个程序都必须有标准的.data、.bss、.code节, 或者这些公约仅仅是指导方针
  • 什么决定了哪些部分是可读、可写和可执行的
  • 任何帮助都将不胜感激

  • .rodata
    用于只读数据,即常量和文字,请参阅

  • 根据,
    .data?
    用于未初始化数据,也称为
    .bss
    分段数据,
    .data
    用于初始化数据

  • 根据,您永远不能假设存在某些节及其顺序(因为它们声明它是编译器定义的)。然而,拥有
    .data
    .code
    是相当标准的,但是,您仍然应该始终检查PE,这就是它存在的原因

  • 这是通过PE节标题完成的,因为它是特定于操作系统的(或特定于PE的:win、elf或mach-o),请参阅节的段落,特别是节描述符的
    特征
    字段(同样,这仅适用于Windows,您需要为您选择的操作系统使用PE布局)