【问题标题】:Comparing register values in x64 Assembly [duplicate]比较 x64 程序集中的寄存器值 [重复]
【发布时间】:2021-01-28 16:39:59
【问题描述】:

我正在尝试根据程序集注册表中的现有值找出一个谜题。

我一直在这条线上遇到麻烦

cmp    %sil,0x12(%rdi)
jne    ...

当我在调试器中检查%rdi%sil 时,它们的第12 个偏移量实际上包含相同的值,但程序仍然会跳转,因为这些值被认为不相等。

我唯一能想到的是,之前的比较是使用cmpb 而不是cmp,并且%sil%rsi 的1 字节版本正在与8 字节值进行比较。

谁能告诉我我的想法是否正确?如果是这样,解决方案的输入是一个字符串,那么我将如何更改输入以适应这个?

【问题讨论】:

  • 0x12(十六进制)不是 12(十进制)。这是(%rdi) 之后的第 18 个字节。这个cmp是一个cmpb,字节操作数大小由寄存器操作数隐含,所以反汇编器省略了它。
  • 哦,我明白了。谢谢

标签: assembly x86-64


【解决方案1】:
0x12(%rdi) 

十进制的十六进制表示不是偏移量本身

【讨论】:

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