読者です 読者をやめる 読者になる 読者になる

【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

全部入りbinutils

スタート低レイヤー#2id:shinichiro_hさんに全部入りのbinutilsが作れるということを教えて頂きました。

さっそく試してみました。MSYS(MinGW)用のバイナリを置いておきます。

/usr/localに展開するだけで使えます。

$ tar xvf binutils-2.23.2-msys-cross-all.tar.xz -C /usr/local

ビルド方法

MSYS(MinGW)では途中でエラーが出ました。調べるのが面倒だったのでNetBSDMinGWでクロスコンパイルしました。

$ 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-as)はx86用のようです。

サポートするターゲット・アーキテクチャ

その数に圧倒されます。

$ 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
(略)

これはもう、コメントのしようもありません。