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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编指令中冒号(:)的未知含义相关的知识,希望对你有一定的参考价值。

我正在使用反汇编程序(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
答案

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

以上是关于汇编指令中冒号(:)的未知含义的主要内容,如果未能解决你的问题,请参考以下文章

VC++代码的汇编分析

汇编语言语句类型格式

翻译 | “扩展asm”——用C表示操作数的汇编程序指令

汇编语言中invoke函数 各参数的含义

汇编第五日

Windows 逆向使用 CE 工具挖掘关键数据内存真实地址 ( 数据查找技巧 | 地址访问调试 | 指令选择技巧 | MOV 汇编指令含义 | 基址值搜索 ) ★