objdump
以下のエントリについて @tetsu_koba さんより_オブジェクトファイルに関する基本的なことから修行のやり直し_という非常に厳しいご指摘を頂戴しております。
man を確認してみたところ、以下。
-d
--disassemble
objfile の機械語命令に対応するアセンブラのニーモニックを表示する。このオプショ ンは、命令を含むと思われるセクションのみを逆アセンブルする。
-D
--disassemble-all
-d と似ているが、命令を含むと思われるセクションだけでなく、全てのセクショ ンを逆アセンブルする。
とほほ。
確認してみます。
$ arm-none-linux-gnueabi-objdump -d -marm init (snip Disassembly of section .text: 000040f8 <main>: 40f8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} 40fc: f5ad 5d85 sub.w sp, sp, #4256 ; 0x10a0 4100: f8df 469c ldr.w r4, [pc, #1692] ; 47a0 <main+0x6a8> 4104: b085 sub sp, #20 4106: f8df 369c ldr.w r3, [pc, #1692] ; 47a4 <main+0x6ac> 410a: 460d mov r5, r1 410c: 447c add r4, pc
_16bit/32bit な命令が混在_というのはこーゆー意味でしたかorz
今度は当たってますように。というか ELF 云々というあたりも含め、オブジェクトファイル関連についてきちんと確認入れようと思います。
修行のやり直し、ということにて。
追記
何故か
というドキュメントを見てたのですが、.init section や .plt section あるいは .text section 云々に関する話が出てますね。
そういった意味では readelf 使って云々ってのもアレですね。
ELF ヘッダとか
$ ./arm-none-linux-gnueabi-readelf /opt/export/armel/linaro/binary/boot/filesystem.dir/sbin/init -h ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: DYN (Shared object file) Machine: ARM Version: 0x1 Entry point address: 0x48e5 Start of program headers: 52 (bytes into file) Start of section headers: 119756 (bytes into file) Flags: 0x5000002, has entry point, Version5 EABI Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 9 Size of section headers: 40 (bytes) Number of section headers: 29 Section header string table index: 28 $
セクションヘッダとか
$ ./arm-none-linux-gnueabi-readelf /opt/export/armel/linaro/binary/boot/filesystem.dir/sbin/init -S There are 29 section headers, starting at offset 0x1d3cc: Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .interp PROGBITS 00000154 000154 000019 00 A 0 0 1 [ 2] .note.ABI-tag NOTE 00000170 000170 000020 00 A 0 0 4 [ 3] .note.gnu.build-i NOTE 00000190 000190 000024 00 A 0 0 4 [ 4] .gnu.hash GNU_HASH 000001b4 0001b4 0001a8 04 A 5 0 4 [ 5] .dynsym DYNSYM 0000035c 00035c 001080 10 A 6 3 4 [ 6] .dynstr STRTAB 000013dc 0013dc 000f62 00 A 0 0 1 [ 7] .gnu.version VERSYM 0000233e 00233e 000210 02 A 5 0 2 [ 8] .gnu.version_r VERNEED 00002550 002550 0000c0 00 A 6 6 4 [ 9] .rel.dyn REL 00002610 002610 0009d8 08 A 5 0 4 [10] .rel.plt REL 00002fe8 002fe8 0006b8 08 A 5 12 4 [11] .init PROGBITS 000036a0 0036a0 00000a 00 AX 0 0 4 [12] .plt PROGBITS 000036ac 0036ac 000a48 04 AX 0 0 4 [13] .text PROGBITS 000040f8 0040f8 013d4c 00 AX 0 0 8 [14] .fini PROGBITS 00017e44 017e44 000006 00 AX 0 0 4 [15] .rodata PROGBITS 00017e4c 017e4c 003fda 00 A 0 0 4 [16] .ARM.exidx ARM_EXIDX 0001be28 01be28 000008 00 AL 13 0 4 [17] .eh_frame PROGBITS 0001be30 01be30 000004 00 A 0 0 4 [18] .init_array INIT_ARRAY 000245a0 01c5a0 000004 00 WA 0 0 4 [19] .fini_array FINI_ARRAY 000245a4 01c5a4 000004 00 WA 0 0 4 [20] .jcr PROGBITS 000245a8 01c5a8 000004 00 WA 0 0 4 [21] .data.rel.ro PROGBITS 000245ac 01c5ac 000550 00 WA 0 0 4 [22] .dynamic DYNAMIC 00024afc 01cafc 000128 08 WA 6 0 4 [23] .got PROGBITS 00024c24 01cc24 0003dc 04 WA 0 0 4 [24] .data PROGBITS 00025000 01d000 00027c 00 WA 0 0 4 [25] .bss NOBITS 0002527c 01d27c 000058 00 WA 0 0 4 [26] .ARM.attributes ARM_ATTRIBUTES 00000000 01d27c 000035 00 0 0 1 [27] .gnu_debuglink PROGBITS 00000000 01d2b1 00000c 00 0 0 1 [28] .shstrtab STRTAB 00000000 01d2bd 00010d 00 0 0 1 Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings) I (info), L (link order), G (group), x (unknown) O (extra OS processing required) o (OS specific), p (processor specific) $
KOZOS 合宿を正月に、なのかどうか。引き篭るか。。。