assembly - 冒号的未知含义 ( : ) in assembly instruction

标签 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 中的内容,值(value) 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 位,所以它没有多大帮助。

关于assembly - 冒号的未知含义 ( : ) in assembly instruction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48029953/

相关文章:

assembly - 代码跳转不正确

c++ - 为什么 std::fill(0) 比 std::fill(1) 慢?

assembly - 如何判断x86指令的长度?

linux - PTRACE_SINGLESTEP 是如何实现的?

compiler-errors - 无法编译 x86_64 .s 和 .c 文件 : undefined reference to function

c# - 划分/移动 assembly 差异

linux - 汇编函数整型局部变量

assembly - ljmp指令在linux内核fork系统调用中起什么作用?

assembly - 在64位模式下使用MOV指令将SS设置为0x0000是否会导致故障#GP(0)?

c - 操作系统 X : write syscall is not executed when loading binary to memory