スタート低レイヤー#2でid:shinichiro_hさんに全部入りのbinutilsが作れるということを教えて頂きました。
さっそく試してみました。MSYS(MinGW)用のバイナリを置いておきます。
/usr/localに展開するだけで使えます。
$ tar xvf binutils-2.23.2-msys-cross-all.tar.xz -C /usr/local
ビルド方法
MSYS(MinGW)では途中でエラーが出ました。調べるのが面倒だったのでNetBSDのMinGWでクロスコンパイルしました。
$ mkdir all $ cd all $ ../binutils-2.23.2/configure --enable-targets=all --enable-64-bit-bfd --disable-nls --program-prefix=all- --disable-werror --host=i386--mingw32 $ gmake
オプションの意味は以下の通りです。
--enable-targets=all | 全部入り! |
--enable-64-bit-bfd | 64bit(elf64など)を有効にする ※付けないと32bitしか使えません |
--disable-nls | メッセージの翻訳を無効にする ※MinGWクロスでは機能しないため |
--program-prefix=all- | コマンドの接頭辞 ※名前が被らないようにするため |
--disable-werror | 警告をエラーにしない ※厳し過ぎてすぐ引っ掛かるため |
--host=i386--mingw32 | MinGWでクロスコンパイルするため ※ビルドしたOSで動かすなら不要 |
使い方
ELFはCPUなどを自動で判別して逆アセンブルできます。
$ all-objdump -d a.out a.out: file format elf64-littleaarch64 (略)
古いバイナリで判別に失敗するときは、形式を指定する必要があります。
$ all-objdump -b a.out-pdp11 -d a.out a.out: file format a.out-pdp11 (略)
サポートするターゲット・アーキテクチャ
その数に圧倒されます。
$ all-objdump --help (略) C:\MinGW\msys\1.0\local\bin\all-objdump.exe: supported targets: pe-i386 a.out.ad obe aix5coff64-rs6000 a.out-zero-big a.out-mips-little epoc-pe-arm-big epoc-pe-a rm-little epoc-pei-arm-big epoc-pei-arm-little pe-arm-wince-big pe-arm-wince-lit tle pei-arm-wince-big pei-arm-wince-little coff-arm-big coff-arm-little a.out-ar m-netbsd pe-arm-big pe-arm-little pei-arm-big pei-arm-little b.out.big b.out.lit tle pei-ia64 elf32-avr elf32-bfin elf32-bfinfdpic elf32-big elf32-bigarc elf32-b igarm elf32-bigarm-symbian elf32-bigarm-vxworks elf32-bigmips elf32-bigmips-vxwo rks elf32-cr16 elf32-cr16c elf32-cris elf32-crx elf32-d10v elf32-d30v elf32-dlx elf32-epiphany elf32-fr30 elf32-frv elf32-frvfdpic elf32-moxie elf32-h8300 elf32 -hppa-linux elf32-hppa-netbsd elf32-hppa elf32-i370 elf32-i386-freebsd elf32-i38 6-nacl elf32-i386-sol2 elf32-i386-vxworks elf32-i386 elf32-i860-little elf32-i86 0 elf32-i960 elf32-ia64-hpux-big elf32-ip2k elf32-iq2000 elf32-lm32 elf32-little elf32-littlearc elf32-littlearm elf32-littlearm-symbian elf32-littlearm-vxworks elf32-littlemips elf32-littlemips-vxworks elf32-m32c elf32-m32r elf32-m32rle el f32-m32r-linux elf32-m32rle-linux elf32-m68hc11 elf32-m68hc12 elf32-m68k elf32-m 88k elf32-mcore-big elf32-mcore-little elf32-mep elf32-microblaze elf32-mn10200 elf32-mn10300 elf32-mt elf32-msp430 elf32-nbigmips elf32-nlittlemips elf32-ntrad bigmips elf32-ntradlittlemips elf32-ntradbigmips-freebsd elf32-ntradlittlemips-f reebsd elf32-openrisc elf32-or32 elf32-pj elf32-pjl elf32-powerpc elf32-powerpc- vxworks elf32-powerpcle elf32-powerpc-freebsd elf32-rl78 elf32-rx-be elf32-rx-be -ns elf32-rx-le elf32-s390 elf32-bigscore elf32-littlescore elf32-sh elf32-shbig -fdpic elf32-shbig-linux elf32-sh-fdpic elf32-shl elf32-shl-symbian elf32-sh-lin ux elf32-shl-nbsd elf32-shl-vxworks elf32-sh-nbsd elf32-sh-vxworks elf32-sh64 el f32-sh64l elf32-sh64l-nbsd elf32-sh64-nbsd elf32-sh64-linux elf32-sh64big-linux elf32-sparc elf32-sparc-sol2 elf32-sparc-vxworks elf32-spu elf32-tic6x-be elf32- tic6x-le elf32-tilegx-be elf32-tilegx-le elf32-tilepro elf32-tradbigmips elf32-t radlittlemips elf32-tradbigmips-freebsd elf32-tradlittlemips-freebsd elf32-us-cr is elf32-v850 elf32-vax elf32-xc16x elf32-xgate elf32-xstormy16 elf32-xtensa-be elf32-xtensa-le elf64-alpha-freebsd elf64-alpha elf64-big elf64-bigmips elf64-bi gaarch64 elf64-hppa-linux elf64-hppa elf64-ia64-big elf64-ia64-hpux-big elf64-ia 64-little elf64-ia64-vms elf64-little elf64-littlemips elf64-littleaarch64 elf64 -mmix elf64-powerpc elf64-powerpcle elf64-powerpc-freebsd elf64-s390 elf64-sh64 elf64-sh64l elf64-sh64l-nbsd elf64-sh64-nbsd elf64-sh64-linux elf64-sh64big-linu x elf64-sparc elf64-sparc-freebsd elf64-sparc-sol2 elf64-tilegx-be elf64-tilegx- le elf64-tradbigmips elf64-tradlittlemips elf64-tradbigmips-freebsd elf64-tradli ttlemips-freebsd elf64-x86-64-freebsd elf64-x86-64-nacl elf64-x86-64-sol2 elf64- x86-64 elf32-x86-64-nacl elf32-x86-64 elf64-l1om-freebsd elf64-l1om elf64-k1om-f reebsd elf64-k1om mmo pe-powerpc pei-powerpc pe-powerpcle pei-powerpcle a.out-cr is demo64 ecoff-bigmips ecoff-biglittlemips ecoff-littlemips ecoff-littlealpha c off-go32 coff-go32-exe coff-h8300 coff-h8500 a.out-hp300hpux a.out-i386 a.out-i3 86-bsd coff-i386 a.out-i386-freebsd a.out-i386-lynx coff-i386-lynx msdos a.out-i 386-netbsd i386os9k pei-i386 coff-x86-64 pe-x86-64 pei-x86-64 coff-i860 coff-Int el-big coff-Intel-little ieee coff-m68k coff-m68k-un a.out-m68k-netbsd coff-m68k -sysv coff-m88kbcs a.out-m88k-mach3 a.out-m88k-openbsd mach-o-be mach-o-le mach- o-fat mach-o-i386 mach-o-x86-64 pe-mcore-big pe-mcore-little pei-mcore-big pei-m core-little pe-mips pei-mips a.out-newsos3 nlm32-alpha nlm32-i386 nlm32-powerpc nlm32-sparc coff-or32-big a.out-pc532-mach a.out-ns32k-netbsd a.out-pdp11 pef pe f-xlib ppcboot aixcoff64-rs6000 aixcoff-rs6000 coff-sh-small coff-sh coff-shl-sm all coff-shl pe-shl pei-shl som coff-sparc a.out-sparc-little a.out-sparc-linux a.out-sparc-lynx coff-sparc-lynx a.out-sparc-netbsd a.out-sunos-big sym a.out-ti c30 coff-tic30 coff0-beh-c54x coff0-c54x coff1-beh-c54x coff1-c54x coff2-beh-c54 x coff2-c54x coff-tic80 a.out-vax-bsd a.out-vax-netbsd a.out-vax1k-netbsd versad os vms-alpha vms-libtxt coff-w65 coff-we32k coff-z80 coff-z8k elf32-am33lin srec symbolsrec verilog tekhex binary ihex C:\MinGW\msys\1.0\local\bin\all-objdump.exe: supported architectures: aarch64 al pha alpha:ev4 alpha:ev5 alpha:ev6 arc arc5 base arc6 arc7 arc8 arm armv2 armv2a armv3 armv3m armv4 armv4t armv5 armv5t armv5te xscale ep9312 iwmmxt iwmmxt2 avr avr:1 avr:2 avr:25 avr:3 avr:31 avr:35 avr:4 avr:5 avr:51 avr:6 avr:101 avr:102 avr:103 avr:104 avr:105 avr:106 avr:107 bfin cr16 cr16c cris crisv32 cris:common _v10_v32 crx d10v d10v:ts2 d10v:ts3 d30v dlx epiphany32 epiphany16 fr30 frv tomc at simple fr550 fr500 fr450 fr400 fr300 h8300 h8300h h8300s h8300hn h8300sn h830 0sx h8300sxn h8500 hppa1.1 hppa2.0w hppa2.0 hppa1.0 i370:common i370:360 i370:37 0 i386 i386:x86-64 i386:x64-32 i8086 i386:intel i386:x86-64:intel i386:x64-32:in tel i860 i960:core i960:ka_sa i960:kb_sb i960:mc i960:xa i960:ca i960:jx i960:hx ia64-elf64 ia64-elf32 ip2022ext ip2022 iq2000 iq10 k1om k1om:intel l1om l1om:in tel lm32 m16c m32c m32r m32rx m32r2 m68hc11 m68hc12 m68hc12 m9s12x m9s12xg m68k m68k:68000 m68k:68008 m68k:68010 m68k:68020 m68k:68030 m68k:68040 m68k:68060 m68 k:cpu32 m68k:fido m68k:isa-a:nodiv m68k:isa-a m68k:isa-a:mac m68k:isa-a:emac m68 k:isa-aplus m68k:isa-aplus:mac m68k:isa-aplus:emac m68k:isa-b:nousp m68k:isa-b:n ousp:mac m68k:isa-b:nousp:emac m68k:isa-b m68k:isa-b:mac m68k:isa-b:emac m68k:is a-b:float m68k:isa-b:float:mac m68k:isa-b:float:emac m68k:isa-c m68k:isa-c:mac m 68k:isa-c:emac m68k:isa-c:nodiv m68k:isa-c:nodiv:mac m68k:isa-c:nodiv:emac m68k: 5200 m68k:5206e m68k:5307 m68k:5407 m68k:528x m68k:521x m68k:5249 m68k:547x m68k :548x m68k:cfv4e m88k:88100 MCore mep h1 c5 MicroBlaze mips mips:3000 mips:3900 mips:4000 mips:4010 mips:4100 mips:4111 mips:4120 mips:4300 mips:4400 mips:4600 mips:4650 mips:5000 mips:5400 mips:5500 mips:6000 mips:7000 mips:8000 mips:9000 mips:10000 mips:12000 mips:14000 mips:16000 mips:16 mips:mips5 mips:isa32 mips:i sa32r2 mips:isa64 mips:isa64r2 mips:sb1 mips:loongson_2e mips:loongson_2f mips:l oongson_3a mips:octeon mips:octeon+ mips:octeon2 mips:xlr mips:micromips mmix mn 10200 mn10300 am33 am33-2 moxie msp:14 msp:11 msp:110 msp:12 msp:13 msp:14 msp:1 5 msp:16 msp:21 msp:31 msp:32 msp:33 msp:41 msp:42 msp:43 msp:44 ms1 ms1-003 ms2 ns32k:32032 ns32k:32532 openrisc or32 pdp11 powerpc:common powerpc:common64 pow erpc:603 powerpc:EC603e powerpc:604 powerpc:403 powerpc:601 powerpc:620 powerpc: 630 powerpc:a35 powerpc:rs64ii powerpc:rs64iii powerpc:7400 powerpc:e500 powerpc :e500mc powerpc:e500mc64 powerpc:MPC8XX powerpc:750 powerpc:titan powerpc:vle po werpc:e5500 powerpc:e6500 rs6000:6000 rs6000:rs1 rs6000:rsc rs6000:rs2 rl78 rx r x s390:31-bit s390:64-bit score7 score3 sh sh2 sh2e sh-dsp sh3 sh3-nommu sh3-dsp sh3e sh4 sh4a sh4al-dsp sh4-nofpu sh4-nommu-nofpu sh4a-nofpu sh2a sh2a-nofpu sh 2a-nofpu-or-sh4-nommu-nofpu sh2a-nofpu-or-sh3-nommu sh2a-or-sh4 sh2a-or-sh3e sh5 sparc sparc:sparclet sparc:sparclite sparc:v8plus sparc:v8plusa sparc:sparclite _le sparc:v9 sparc:v9a sparc:v8plusb sparc:v9b spu:256K tms320c30 tms320c4x tms3 20c3x tms320c54x tic6x tic80 tilegx tilegx32 tilepro v850 v850e2v3 v850e2 v850e1 v850e vax w65 we32k:32000 xstormy16 xtensa xc16x xc16xl xc16xs xgate z80-any z8 0-strict z80 z80-full r800 z8001 z8002 (略)
これはもう、コメントのしようもありません。