Tweet

[[FrontPage]] > [[Linux]] > [[embedded>Linux/embedded]] > [[binutils>Linux/embedded/binutils]]

binutils の概略.

*ld [#z4577add]
リンカ.

OS 上で動作するプログラムを作成する時は普通は gcc 経由で呼び出すので,明示的に ld を使う機会はほとんど無い.

が,スタンドアロンで動作するプログラムの場合は,明示的に呼び出す必要がある.

オブジェクトのアドレス配置などは'''リンカスクリプト'''で指定する.
簡易な配置はコマンドラインオプションでも指定可能.

*objcopy [#r185ebaa]
オブジェクトの形式変換.

例えば,linux カーネルをコンパイルして作成される vmlinux ファイル.
これは elf 形式のため,このままメモリ上に配置しても実行することはできない.
これをバイナリイメージ(というか,メモリ上に展開されるイメージ)に変換することができる.

あと,「形式」としてモトローラの S-redord もサポートしている.
EPROM ライタを使用する時は便利かも.

*objdump [#h2456cde]
ディスアセンブラ(だけ,というわけでもないのだけど).

まずは,-d オプション.
ディスアセンブルを行う.
elf 形式など,領域情報(プログラムコード・データの区別)が内包されているファイルの場合,そこらへんはよろしく取り計らってくれる.

が,前述の objcopy などでバイナリ形式に変換された場合,諸々の情報が落ちてしまっている.
このような時は,-D オプションを使用する.
ただし,プログラムコード・やデータの情報は落ちてしまっているので,データ領域もコードとしてディスアセンブルされてしまう.
ここらは古き良き時代(?)のディスアセンブラ同様である.

gcc で -g フラグを付けてデバッグ情報付きでコンパイルされたファイルは,-S オプションも使用可能である.
C のソースとアセンブラのニーモニックが霜降りで表示される.

*strip [#p4c1fe51]
OS 上の実行オブジェクトから,ローカルシンボル・デバッグ情報などの実行時に不要な情報を削除する.
ファイルシステムのフットプリント削減には有効.

シェアードライブラリ (*.so) にも適用可能であるが,不具合が出るという説もある.

linux のカーネルモジュールに適用すると,読み込みできなくなるので注意.

*nm [#f47be580]
実行オブジェクトのシンボルとアドレスの一覧を出力する.

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS