data16在objdump输出中的含义是什么?

Dou*_*son 3 assembly x86-64 objdump

使用objdump命令:

$ objdump -M att -d  wrapping_counters_test   
Run Code Online (Sandbox Code Playgroud)

我制作了这个列表(这只是整个列表中的一个片段):

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
Run Code Online (Sandbox Code Playgroud)

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

Jes*_*ter 6

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