FC2ブログ
メモ帳
メモ帳
スポンサーサイト
--年--月--日 (--) --:-- | 編集
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
objcopyとobjdump
2009年05月26日 (火) 11:02 | 編集
とある不具合発生時に陥るループから抜け出す条件を
コンソールからパスワードの入力とする修正対応に
パスワードをオブジェクトに埋め込む必要があった。

で、調べるとojcopyでリンクできるファイルに変換するらしい。

objcopy -I [file形式] -O [file形式] -B [arch] --rename-section [元]=[変更]入力ファイル 出力ファイル

-Iの後は入力ファイルの形式。
今回はパスワードなので「abcdef」とか書いたテキストだったのでbinaryと指定。

-Oの後は出力ファイルの形式。
実装環境がelf32だったのでelf32-littleと指定。

-Bの後はアーキテクチャ指定。
実装アーキテクチャがmepだったのでmepと指定。

--rename-sectionはセクション名を変えたいときに指定。
[元]は元のセクション名。自環境では.dataだった。
[変更]は変更したいセクション名。お好みで。

サポートされている形式なんかは
objcopy --help
objcopy: サポートされているターゲット: elf32-i386 a.out-i386-linux efi-app-ia32 elf32-little elf32-big srec symbolsrec tekhex binary ihex trad-core
て感じで出力される。

出来たファイルを確認するのは
objdump
で。

objdump -t -s 出力ファイル名

-tはシンボルテーブルを出力する。
-sはセクションのデータを出力する。

[file名]: file format elf32-mep-little

SYMBOL TABLE:
00000000 l d .data 00000000
00000000 g .data 00000000 _binary_[file名]_start
00000008 g .data 00000000 _binary_[file名]_end
00000008 g *ABS* 00000000 _binary_[file名]_size


Contents of section .data:
0000 12345678 9abcdef0 xxxxxxxxxx


こんな感じで、ファイルフォーマット、シンボルテーブル、格納されているデータが出力されるので
これを使ってobjcopyで作成したファイルの確認をする。

で、この出来たファイルをリンクしてコードで使用すると
シンボルテーブルの_binary_[file名]_start、_binary_[file名]_end、_binary_[file名]_sizeが使用できる。


abcdefとデータを書き込んだtest.binテキストファイルを用意。
objcopy -I binry -O elf32-mep-little -B mep test.bin test.obj
でリンク可能なファイル生成する。
ソースファイルで

#include 略

extern char _binary_test_bin_start[];
extern char _binary_test_bin_end[];
extern char _binary_test_bin_size[];

int main(void){

}


て感じで外部参照することで使用することが出来る。
_binary_test_bin_startには「abcdef」の先頭アドレス
_binary_test_bin_endには「abcdef」の終端アドレス
_binary_test_bin_sizeには「abcdef」のサイズ
がそれぞれ参照できます。
ちなみに、自分の環境ではファイル終端文字も含まれたので
終端アドレス+1、サイズ+1だったのでそこらへん注意。

test.binに改行コード入れてました。。。なので、+1でないです。
コメント
この記事へのコメント
コメントを投稿する
URL :
コメント :
パスワード :
秘密 : 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2004 Powered By FC2 allrights reserved. / template: sukechan
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。