wam*_*amp 21 x86 assembly memory-address
0040103A CALL DWORD PTR DS:[40207A] USER32.MessageBoxA
Run Code Online (Sandbox Code Playgroud)
什么DS:意思?
sne*_*rch 28
这意味着指令在数据段中引用内存 - 在现代操作系统中几乎可以忽略,因为它们运行的是扁平地址空间模型(代码,数据和堆栈段都指向相同的内存范围,并且内存保护是用分页处理).
一点点阐述 - 请注意,为了简单起见,这是在运行Windows的32位保护模式的上下文中.
甲段寄存器(CS,DS,SS,ES,FS,GS)持有selector指向一个descriptor.有两个描述符表:全局(GDT)和本地(LDT),选择器有一个指示要使用的位.Windows(几乎?)专门使用全局表.
一个描述符是基本上一{开头地址,大小}对-还有更多的它,但是这是这篇文章的范围之外.
Windows使用平面内存模型:每个进程都有一个4GB的地址空间,从内存地址0开始,并使用分页来隔离彼此的进程.
由于进程具有这个世界的平面视图,它们使用{0,4GB}描述符与所有段一起运行 - 因此,不是分配每个进程描述符,而是Windows只能使用少数全局描述符并且所有进程都使用这些描述符.
该便携式可执行格式定义sections,这是无关的86 segments-即使有一些概念上的重叠.PE EXE可以具有您希望的任何部分布局,但通常是分割成(至少)代码(读/执行),数据(读/写),资源(只读?).将可执行文件拆分为多个部分可以将x86页级内存保护应用于内存范围.
虽然普通段不会按进程更改,但Windows使用FS寄存器指向每线程 TIB结构.
请参见本的概述.这是来自80386上的旧文档,但信息仍然适用.
| 归档时间: |
|
| 查看次数: |
20776 次 |
| 最近记录: |