assembly - objdump 输出中的 data16 是什么意思?

标签 assembly x86-64 objdump

使用 objdump 命令:

$ objdump -M att -d  wrapping_counters_test   

我生成了此列表(这只是整个列表的一个片段):

100000ae5:   31 ed                   xor    %ebp,%ebp
100000ae7:   31 d2                   xor    %edx,%edx
100000ae9:   49 89 c4                mov    %rax,%r12
100000aec:   b8 00 ca 9a 3b          mov    $0x3b9aca00,%eax
100000af1:   66 66 66 66 66 66 2e    data16 data16 data16 data16 data16 nopw %cs:0x0(%rax,%rax,1)
100000af8:   0f 1f 84 00 00 00 00
100000aff:   00
100000b00:   8d 75 01                lea    0x1(%rbp),%esi

第二个mov指令后面的data16行是什么意思?

最佳答案

这只是为了对齐填充而插入的多字节nop。请注意最后一行位于地址 100000b00 处,它是 16 字节对齐的。 data16 本身是一个操作数大小覆盖前缀。一般只用一个,不单独拆解,而是包含在指令后缀中。您可以看到有六个 66 实例,但只出现了五个 data16,第六个是 nopw 中的 w而你通常只能得到这个。仅单独显示为延长指令而插入的额外前缀。

关于assembly - objdump 输出中的 data16 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36706280/

相关文章:

c - 二进制文件上 objdump 输出左侧的地址是什么?

c - NASM 数组指针操作

assembly - "Error A2006: Undefined Symbol, Macro Called From, Main Line Code"

linux - 预加载自定义 strchr() - ubuntu 崩溃

testing - 如何测试 Bit-Banged 通信的汇编例程

c++ - 尝试写入共享内存时出现总线错误

assembly - 如何遍历汇编中的字符串,直到到达null? (strlen循环)

x86 - x86、x32 和 x64 架构之间的区别?

c - 强制进入 PLT 部分

linux - objdump 将文本段的内容提取为二进制格式