【问题标题】:How to compare two addresses in x86 assembly?如何比较 x86 程序集中的两个地址?
【发布时间】:2017-07-14 21:03:36
【问题描述】:

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

【问题讨论】:

  • 你得到什么错误?
  • 查看Addressing in Assembler 并获取答案中引用的.pdf。 (对您的问题的简短回答是删除[ ]s 以比较地址——而不是存储在该地址的值......)
  • 你在找cmp ecx, 1D59D3BCh - 5Ch吗?
  • 是要比较地址,还是比较这些地址指向的内存内容?正如 Paul H 所说,地址就像整数一样,您可以与 cmp 进行比较。 (通常最有意义的是事后检查标志的上方/下方,而不是签署更大/更少。nvm,您只是在寻找相等)

标签: assembly code-injection disassembly opcode


【解决方案1】:

我正在尝试执行以下操作: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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多