Assembly 比较x64程序集中的寄存器值
我试图根据程序集注册表中的现有值来解决一个难题 我一直在这条线上遇到麻烦Assembly 比较x64程序集中的寄存器值,assembly,x86-64,Assembly,X86 64,我试图根据程序集注册表中的现有值来解决一个难题 我一直在这条线上遇到麻烦 cmp %sil,0x12(%rdi) jne ... 当我在调试器中检查它们时,%rdi和%sil的第12个偏移量实际上包含相同的值,但程序仍然会跳转,因为这些值被认为不相等 我能想到的唯一一件事是,之前的比较使用的是cmpb而不是cmp,并且%sil是%rsi的1字节版本,正在与8字节值进行比较 有人能告诉我,我的想法是否正确吗?如果是这样,解决方案的输入是一个字符串,那么如何更改输入以适应此情况 0x1
cmp %sil,0x12(%rdi)
jne ...
当我在调试器中检查它们时,%rdi
和%sil
的第12个偏移量实际上包含相同的值,但程序仍然会跳转,因为这些值被认为不相等
我能想到的唯一一件事是,之前的比较使用的是cmpb
而不是cmp
,并且%sil
是%rsi
的1字节版本,正在与8字节值进行比较
有人能告诉我,我的想法是否正确吗?如果是这样,解决方案的输入是一个字符串,那么如何更改输入以适应此情况
0x12(%rdi)
是十进制的十六进制表示,而不是偏移量本身
0x12
(十六进制)不是12(十进制)。这是(%rdi)
之后的第18个字节。这个cmp
是一个cmpb
,字节操作数大小由寄存器操作数暗示,因此反汇编程序省略了它。我明白了。非常感谢。