GNU Binutils

GNU Binutils、または単にbinutilsと呼ばれるこのツール群は、様々なオブジェクトフォーマットを扱うためのプログラミングツールです。具体的には、GNUプロジェクトが提供するツールの一つであり、バイナリレベルでのプログラミングを支援するために設計されています。これにより、クロスアセンブラとしての活用も可能となります。

現在のbinutilsは、シグナスソリューションズ(後にレッドハットに買収)によって、BFD(Binary File Descriptor)ライブラリを用いて実装されました。このBFDライブラリは、様々なオブジェクトファイルフォーマットを抽象化し、binutilsの各ツールが異なるフォーマットに対応できるようにする重要な役割を担っています。

binutilsは、GCC、make、GDBといった他の開発ツールを補完する形で利用されるのが一般的です。具体的には、コンパイルされたオブジェクトファイルの操作、リンク処理、デバッグ情報の解析など、開発プロセス全体にわたって様々な場面で活用されます。

binutilsに含まれるコマンド



binutilsは、以下のような多様なコマンドを含んでいます。

addr2line: プログラム内のアドレスを、対応するソースコードのファイル名と行番号に変換します。
ar: アーカイブファイル(.aファイルなど)の作成、変更、展開を行います。
as: GNUアセンブラ。アセンブリ言語で記述されたコードを機械語に変換します。
c++filt: C++のシンボル名を人間が読める形式にデマングルします。
dwp: DWARFデバッグ情報のパッケージングユーティリティです。
elfedit: ELFファイル(Executable and Linkable Format)のヘッダやプログラムプロパティを編集します。
gold: ELFファイル用の代替リンカです。高速なリンク処理を実現します。
gprof: C、Pascal、Fortran77プログラムの実行プロファイルを取得します。プログラムのどの部分がどれだけ実行されたかを分析します。
gprofng: Gprof Next Generationの略で、パフォーマンスデータを収集・分析するためのツール群のドライバです。
gp-archive: gprofngで収集したパフォーマンスデータのアーカイブを行います。
gp-collect-app: ターゲットアプリケーションのパフォーマンスデータを収集します。
gp-display-html: プロファイルデータをHTML形式で表示するためのディレクトリ構造を生成します。
gp-display-src: ターゲットオブジェクトの逆アセンブル結果と共にソースコードを表示します。
gp-display-text: パフォーマンスデータをプレーンテキスト形式で表示します。
ld: リンカ。複数のオブジェクトファイルを結合し、実行可能なプログラムを作成します。
nm: オブジェクトファイルに含まれるシンボル(関数、変数など)を表示します。
objcopy: オブジェクトファイルのコピー、およびオブジェクトフォーマットの変換を行います。
objdump: オブジェクトファイルの内容をダンプ表示します。
ranlib: アーカイブファイルのインデックスを作成します。リンク処理の高速化に貢献します。
readelf: ELFファイルの内容を表示します。
size: オブジェクトファイル内のセクションのサイズと、全体のサイズを表示します。
strings: ファイル内に含まれる印刷可能な文字列を表示します。
strip: オブジェクトファイルからシンボル情報を除去し、ファイルサイズを小さくします。

binutilsは、当初は少数のユーティリティで構成されていましたが、その後のバージョンアップにより、リンカとアセンブラ(バージョン2.5以降)といった、より関連性の高いツールも含まれるようになりました。

BFDとlibopcodes



個々のbinutilsコマンドは、比較的単純な機能しか持ちませんが、これらの機能を組み合わせ、より高度な処理を実現するために、BFD (Binary File Descriptor) ライブラリとlibopcodesライブラリが提供されています。BFDは、異なるオブジェクトフォーマットを抽象化するライブラリであり、libopcodesは、様々なアーキテクチャの機械語を扱うためのライブラリです。

BFDの最初のバージョンは、David Henkel-WallaceとSteve Chamberlainによって書かれました。その後、Ken RaeburnとIan Lance Taylorがメンテナンスを行い、2005年以降はNick Cliftonがメンテナンスを担当しています。

参考資料



GNU Binutils(公式サイト)
* Documentation for binutils

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。