Binutilsは、GNUプロジェクトの一部であり、多数のプラットフォームで動作するバイナリユーティリティのコレクションです。Binutilsには、アセンブラ、リンカー、アーカイバ、デバッグガーなどが含まれており、これらを使用して、オブジェクトファイルや実行可能ファイルを生成、変換、操作することができます。
このチュートリアルでは、Binutilsのさまざまな機能について、初心者向けに解説していきます。具体的には、アセンブル、リンク、デバッグ、アーカイブなどの操作方法について説明し、サンプルコードを使用して実際に操作を行います。
Binutilsを使用することで、プログラマはより効率的に、かつ正確にバイナリファイルを生成、変換、操作することができます。このチュートリアルを通じて、Binutilsを理解し、効果的に使用することができるようになることを目的としています。
__TOC__
以下はBinutilsに含まれる主要なコマンドとそれらの簡単な説明です（アルファベット順）。
addr2line: プログラムカウンタのアドレスから、ソースコードと行番号を逆引きするために使用されます。
ar: アーカイブを作成、修正、抽出するために使用されます。
as: GNUのアセンブラで、アセンブラ言語から機械語を生成するために使用されます。
c++filt: C++シンボル名をデマングルするために使用されます。
dwp: 複数のプログラムオブジェクトを1つのファイルに結合するために使用されます。
elfedit: ELF形式のファイルのヘッダーとセクションを修正するために使用されます。
gprof: プロファイル結果を生成するために使用されます。処理されたプログラムが必要です。
gprof-ng: gprofの改善版で、より高速なプロファイラです。
ld: リンカで、異なるオブジェクトファイルを1つの実行ファイルにリンクするために使用されます。
ldd: 共有オブジェクトの依存関係を表示するために使用されます。
nm: オブジェクトファイルからシンボルテーブルを表示するために使用されます。
objcopy: オブジェクトファイルの形式を変換したり、シンボルテーブルやリロケーションを操作するために使用されます。
objdump: オブジェクトファイルの内容を解析して、機械語やシンボルテーブル、リロケーション、デバッグ情報を表示するために使用されます。
ranlib: アーカイブファイルの索引を生成するために使用されます。
readelf: ELF形式のファイルのヘッダー、プログラムヘッダ、セクションヘッダなどの情報を表示するために使用されます。
size: オブジェクトファイルのセクションのサイズを表示するために使用されます。
strings: バイナリファイルからASCII文字列を抽出するために使用されます。
strip: オブジェクトファイルからシンボルテーブルやデバッグ情報を削除するために使用されます。
windmc: Windowsメッセージリソースファイルをコンパイルするために使用されます。
Binutilsに含まれる主要なライブラリには、以下があります：
BFDライブラリ：BFD（Binary File Descriptor）ライブラリは、様々なフォーマットのバイナリファイルの読み書きに使用されます。ELF、COFF、PE、Mach-O、a.outなど、多数のフォーマットに対応しています。
libopcodesライブラリ：libopcodesライブラリは、オペコードバイトやそれらのオペランドを扱うための一連の関数を提供し、ディスアセンブルやオペコードバイトの操作を行うことができます。