1. ホーム
  2. assembly

[解決済み] objdumpの出力にあるdata16とはどういう意味ですか?

2022-02-28 21:07:43

質問

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

の行は何を意味しているのでしょうか? data16 に続く mov というのは?

どのように解決するのですか?

それは、単なるマルチバイトの nop アライメントパディングのために挿入されます。最後の行がアドレス 100000b00 であり、16バイトアライメントである。 data16 はオペランドサイズオーバーライドの接頭辞です。通常は1つだけ使用され、別にディスアセンブルされることはなく、命令のサフィックスに含まれます。6つの 66 インスタンスが5つだけ data16 が出現し、6番目は w の中に nopw と、通常はそれしか出てきません。命令を長くするために挿入された余分な接頭辞だけが別に表示されます。