我在读“黑客:剥削的艺术”。
在书中,寄存器与我在电脑上看到的寄存器不同。这些是我的cpu寄存器:
RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, R8, R9, R10, R11, R12, R13, R14, R15, RIP, EFLAGS, CS, SS, DS, ES, FS, gs
在书中,寄存器是:
EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI, EIP, EFLAGS, CS, SS, DS, ES, FS, GS
有人可以解释为什么他们不同吗?这是可能的,因为我正在使用amd cpu?
在这种情况下,有人可以解释一下这两种架构的寄存器之间的对应关系吗?
答案 0 :(得分:5)
r
中以rax
开头的寄存器,rbx
等,是AMD64 extension引入的 64位寄存器现有的32位x86 ISA。 ISA扩展随后被英特尔采用,通常以更中性的名称x86-64为人所知。基本上所有在过去十年中从AMD和英特尔发布的x86芯片都支持这种ISA。
eax
,ebx
等寄存器是32位寄存器,它们既存在于原始的32位x86 ISA中,也存在于64位x86-64中。如果您的书只将 引用到那些寄存器,那么很可能它不会覆盖64位扩展(可能它是在它之前写的)。
请注意,32位和64位寄存器不是单独的寄存器,因为它们重叠:例如,64位rax
的底部32位为eax
,并且依此类推rbx
和ebx
,r8
和r8d
等等。因此,对32位寄存器的修改会反映在相应的64位寄存器中,反之亦然。
16位(ax
等)和8位(al
等)寄存器之间存在类似的关系。您可以在many places中找到所有血腥的详细信息。