いや上のを書いててふと思ったが、x86-64 の nop って xchg eax, eax ではなくね?
やっぱそうなのか…
x86-32
- 本物の nop 命令は存在しない
- xchg eax, eax (0x90) は何もしない命令として、nop の別名が付いている
- 0x90 は、本物の nop
- xchg eax, eax (上位32bitクリア) と nop (何もしない) は意味が変わる
- xchg eax, ecx は 1byte で書ける(0x91) これは上位クリアする
- xchg eax, eax は 1byte で書けない(0x87 0xc0)
Disassembly of section .text: 0000000000000000 <a>: 0: 90 nop 1: 87 c0 xchg %eax,%eax 3: 91 xchg %eax,%ecx 4: 92 xchg %eax,%edx 5: 93 xchg %eax,%ebx
へぇ…