MOV 指令的问题
这个是IDA反汇编出来的代码:.text:FFFFFFFF8020014A 48 8B 25 3F 00 00 00 mov rsp, cs:off_FFFFFFFF80200190
.text:FFFFFFFF80200151 6A 00 push 0
.text:FFFFFFFF80200153 9D popfq
.text:FFFFFFFF80200154 0F 01 15 A5 AE 3D 00 lgdt fword ptr cs:unk_FFFFFFFF805DB000
.text:FFFFFFFF8020015B B8 18 00 00 00 mov eax, 18h
这是Intel® 64 and IA-32 Architectures Software Developer’s Manual的指令说明:
Opcode Instruction Op/En 64-Bit mode Compat/Leg Mode Description
8B /r MOV r16,r/m16 RM Valid Valid Move r/m16 to r16.
8B /r MOV r32,r/m32 RM Valid Valid Move r/m32 to r32.
0F 01 /2 LGDT m16&32 M N.E. Valid Load m into GDTR.
0F 01 /2 LGDT m16&64 M Valid N.E. Load m into GDTR.
目标代码为64位,Manual说明MOV(8B)指令是把r/m32的数MOV到r32寄存器中,为什么IDA反出来的汇编却是相对地址呢(0xFFFFFFFF80200151 + 0x0000003F = 0xFFFFFFFF80200190)?
那个lgdt指令也是这样?
[ 本帖最后由 wfoo 于 2014-9-26 09:56 编辑 ]