汇编指令中冒号(:)的未知含义

时间:2017-12-30 00:52:58

标签: assembly x86 x86-64 disassembly

我使用反汇编程序(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中的16个字节:

54 00 00 49 89 E8 FF 15 DC 5F 00 00 E9 57 FF FF

1 个答案:

答案 0 :(得分:8)

它是内存操作数的大小,无论出于何种原因打印。我从example on the SmartDec home page推导出来的内容为movzx edx, [ecx]:16因此,这与其他汇编程序(或movzx edx, word [ecx])中的word ptr相当。只有在无法从其他操作数推导出大小时才有用,就像在这个movzx情况下一样。 SmartDec似乎每次都会显示它,例如对于您在问题中的示例,mov rax, [rip + 0x32b5]:64它清楚地表明大小为64位,因此它没有多大帮助。