我正在使用反汇编程序(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]:16example 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/

10-11 19:07