Capstone 反汇编中的操作数地址与 IDA/HIEW 中的不同

逆向工程 拆卸 地址 顶石
2021-06-22 11:45:44

我正在尝试使用Capstone反汇编 x64 可执行文件(dll)但是它返回的操作数地址与 IDA/HIEW 的反汇编不匹配。

这是机器代码:

0x48, 0x8D, 0x0D, 0xED, 0x44, 0x01, 0x00

在 IDA/HIEW 中,反汇编是:

lea  rcx,[0000148F8]

但是通过使用 Capstone(带有 PowerShell 绑定),我得到了不同的地址0x144ed

Get-CapstoneDisassembly -Architecture CS_ARCH_X86 -Mode CS_MODE_64 -Bytes (
    0x48, 0x8D, 0x0D, 0xED, 0x44, 0x01, 0x00
) -Address 0x1800000004096 -Detailed

Size     : 7
Address  : 0x180001000
Mnemonic : lea
Operands : rcx, qword ptr [rip + 0x144ed]
Bytes    : {72, 141, 13, 237, 68, 1, 0, 148, 204, 148, 0, 17, 0, 128, 0, 0}
RegRead  :
RegWrite :

您可以使用Capstone.js488D0DED440100作为输入来在线验证这一点

我也试过SharpDisasm,但结果是一样的:

lea rcx, [rip+0x144ed]

有人可以帮我了解这里发生了什么吗?

1个回答

这是RIP 相对寻址基本上,它将 0x144ed 添加到下一条指令的地址 - 即 rcx = rip+ 7(因为该指令是 7 个字节)+ 0x144ed。在 IDA 中,该指令位于 0x404,因此它将 0x144ed 添加到 (0x404+7) = 0x148f8