Linux/x86での,アセンブラ短歌の簡単な試しかたです.
例えば以下の短歌があったとします.
b8 57 61 6b 61 53 50 ba 04 00 00 00 bb 01 00 00 00 b8 04 00 00 00 89 e1 cd 80 58 31 c0 5b c3
■ きちんと実行ファイルを作る方法
まず,バイナリエディタで上記バイナリをそのまま入力してファイルにします. ここでは tanka.bin としましょう.
次に以下のようなファイルをtanka.Sという名前で作成します.
.section .text .global main .type main, @function main: .incbin "tanka.bin"もしくはtanka.Sを以下のようにして,バイナリコードを直接埋め込んでもOKです. これだとバイナリエディタを使わずに済みます.
.section .text .global main .type main, @function main: .byte 0xB8 .byte 0x57 .byte 0x61 ...
tanka.Sを以下でアセンブルして実行形式が生成できます.
$ gcc tanka.S -o tanka実行してみます.
$ ./tanka Waka$逆アセンブルしてみます.
$ objdump -d tanka tanka: file format elf32-i386 ...(中略)... 080483b4 <main>: 80483b4: b8 57 61 6b 61 mov $0x616b6157,%eax 80483b9: 53 push %ebx 80483ba: 50 push %eax 80483bb: ba 04 00 00 00 mov $0x4,%edx 80483c0: bb 01 00 00 00 mov $0x1,%ebx 80483c5: b8 04 00 00 00 mov $0x4,%eax 80483ca: 89 e1 mov %esp,%ecx 80483cc: cd 80 int $0x80 80483ce: 58 pop %eax 80483cf: 31 c0 xor %eax,%eax 80483d1: 5b pop %ebx 80483d2: c3 ret ...(後略)...
■ バイナリファイルを直接逆アセンブルする方法
もしくは以下のようにして,tanka.bin を直接逆アセンブルすることもできます.
$ objdump -b binary -m i386 -D tanka.bin tanka.bin: file format binary Disassembly of section .data: 0000000000000000 <.data>: 0: b8 57 61 6b 61 mov $0x616b6157,%eax 5: 53 push %ebx 6: 50 push %eax ...(後略)...この場合,objdump 実行時の -m でのアーキテクチャ指定は必須です. -m で指定できるアーキテクチャ名は,objdump -i で知ることができます. x86以外のアーキの場合も,同様のやりかたで知ることができます.
$ objdump -i ...(中略)... binary (header endianness unknown, data endianness unknown) i386 ...(後略)...