我正在使用反汇编程序(SmartDec:http://decompilation.info/)并且生成的反汇编中的许多指令看起来与此类似:
mov rax, [rip + 0x32b5]:64
我不熟悉这个指令的
:64
部分。这是什么意思?其他例子:
cmp [rcx + r8 * 0x8]:64, 0x0
mov eax, [rip + 0x592a]:32
jmp [rip + 0x6bad]:64
这个反汇编器没有显示相应的机器码,所以我用了一个十六进制编辑器,查找了它说这条指令所在的地址:
1665: mov rax, [rip + 0x19a4]:64
这就是 Little Endian 中的内容,值(value) 16 个字节:
54 00 00 49 89 E8 FF 15 DC 5F 00 00 E9 57 FF FF
最佳答案
它是内存操作数的大小,无论出于何种原因打印。我从一个读作 movzx edx, [ecx]:16
的 example on the SmartDec home page 推导出来,因此这与其他汇编程序(或 movzx edx, word [ecx]
)中的 word ptr
等效。仅当无法从其他操作数推导出大小时才有用,如在此 movzx
情况下。 SmartDec
似乎每次都显示它,例如对于您在问题中的示例 mov rax, [rip + 0x32b5]:64
很明显,大小是 64 位,因此它没有多大帮助。
关于assembly - 冒号的未知含义 ( : ) in assembly instruction,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48029953/