当我查看Olly中的寄存器窗口时,我发现代码段和数据段寄存器都跨越了整个存储空间。这是否意味着它们相互重叠?
当我查看内存映射时,它似乎填充了代码区域和数据区域。
答案 0 :(得分:0)
在win32上,几乎所有段寄存器都从0到0xffffffff。所以,是的,你可以说它们重叠了。例如,您可以在代码中自由地交换段寄存器(但是由于前缀,指令的操作码通常会变大)。
FS寄存器是一个例外。它为进程中的每个线程设置不同,可用于查找Thread Information Block。
Windows使用内存保护来尝试将数据和代码保存在一起。如果查看内存映射,可以在“访问”列中看到哪些内存块具有“E”(执行保护)。这可能是所有代码,没有“W”(写保护)。