【发布时间】:2013-11-22 20:28:28
【问题描述】:
我需要修改一些 dll,但我不知道,段寄存器 (DS, SS, ...) 在保护模式下有什么作用。我在学校学习了真正的 16 位模式,其中段寄存器乘以 16 加上普通寄存器中的偏移量给出物理内存中的有效地址。在保护模式下,有一些平面内存模型和虚拟内存,其中每个进程“拥有”4GB 内存,所以如果寄存器有 32 位,那么我只能通过“偏移”寄存器来寻址虚拟内存的每个字节。那么哪些puproses在保护模式下有段寄存器,例如
mov eax, dword ptr ds:[20037DA0]
【问题讨论】:
-
您使用的是哪个反汇编程序?也许它默认总是根据操作码推断和显示段寄存器,即使内存没有分段。
-
@Michael:我正在使用 ollydbg
-
内存仍然是分段的,尽管最流行的操作系统只使用一个段并将所有段寄存器设置为相同的值。
-
是 Win32 DLL 还是 Win16 dll? Win32 使用平面内存,几乎忽略了段寄存器。寄存器名称
eax有点暗示Win32。 -
这个问题似乎离题了,因为它不是一个实际的编程问题。它看起来像是一个更适合 cs.stackexchange.com 的理论概念问题。
标签: assembly x86 cpu-registers memory-segmentation