如何比较x86程序集中的两个地址?

时间:2017-07-14 21:03:37

标签: assembly code-injection disassembly opcode

我正在尝试在程序中执行一些字节注入,以便在ecx+5C等于我为其提供立即值的特定地址时执行特定任务。我正在尝试执行以下操作:cmp [ecx+5C], 1D59D3BC。但是我收到了一个错误。有谁知道如何将寄存器+偏移地址与x86汇编中的直接地址进行比较?

1 个答案:

答案 0 :(得分:3)

  

我正在尝试执行以下操作:cmp [ecx+5C], 1D59D3BC   但是我收到了错误。

可能导致失败的原因:

  • 您需要为汇编程序指定十六进制前缀或后缀以接受您的指令。
  • 您需要指定操作的大小。汇编程序不会猜你。

请尝试以下任何一种方法(取决于您的汇编程序):

cmp dword ptr [ecx + 5Ch], 1D59D3BCh
cmp dword ptr [ecx + 0x5C], 0x1D59D3BC
cmp dword [ecx + 5Ch], 1D59D3BCh
cmp dword [ecx + 0x5C], 0x1D59D3BC
  

有谁知道如何将寄存器+偏移地址与x86汇编中的直接地址进行比较?

lea eax, [ecx + 5Ch]   ;put the address in EAX
cmp eax, 1D59D3BCh   ;compare with the immediate

但PaulH在评论中表示的更短:

cmp ecx, 1D59D3BCh - 0000005Ch