内存分段,堆和mmap

时间:2016-08-03 07:18:45

标签: linux memory x86 memory-segmentation

这个问题主要与x86和linux

有关 在x86上,每个访问内存的操作都需要在某些"段"内完成。执行程序时,程序会保存三个指向某些存储器地址的段寄存器,例如

  • 你有CS指向你内在的记忆 阅读并执行
  • 你有DS指向你内在的记忆 读写
  • 你有SS指向你内在的记忆 也可以读写

执行某些代码时,处理器会检查您对某个地址所做的每条JMPCALL指令是否在CS范围内,您所做的每次读/写操作都在如果在DS内存限制范围内,则会检查代码中的全局变量,对于SS, 鉴于此,我们提供了一些提供内存保护的内存模型。

现在我的问题是,当我们动态分配一些内存时会发生什么? 还是记忆地图呢? 执行程序必须有一些寄存器指向IO操作的位置......我假设这是FS / GS / ES寄存器启动但我不确定。如果在这个领域有更多经验的人可以向我解释这个问题,我会喜欢它。

我之前写了一些代码测试并将其拆解,输出结果令人失望..

我的代码就像

int main()
{
 int * mem = (int *) malloc(4096)

 mem[0] = 5;

 return 0;
}

我希望在反汇编代码中看到类似

的内容
lea eax, mem_addr
mov fs:[eax], 5

然而这并没有发生..如果有人能清楚这一点,我会喜欢它

0 个答案:

没有答案