objdump 输出中的 data16 是什么意思?
What does data16 mean in objdump output?
使用 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 [=11=]x3b9aca00,%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
,你通常只能得到它。仅单独显示为延长指令而插入的额外前缀。
使用 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 [=11=]x3b9aca00,%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
,你通常只能得到它。仅单独显示为延长指令而插入的额外前缀。