« 「ベターマン」 | トップページ | 「レコンキスタ(OPデモ)」(コットンソフト) »

実行ファイルへのバイナリの埋め込み

名著「BINARY HACKS」(高橋哲 et al./O'REILLY/2006.11)を読んでいたのですが、これの「objcopyで実行ファイルにデータを埋め込む」という項目でobjcopyをつかってデータファイルをオブジェクトファイル(*.o)に変換する方法(p48)が書いてありました.

その中の処理で埋め込んだデータサイズを取得する方法が

extern char _binary_xxx_yyy_size[]; /* xxx_yyy depends on the file name. */

int size = (int)_binary_xxx_yyy_size;

なんで配列の先頭アドレスがサイズ・・・?と思い、readelfで中身を見てみると

Symbol table '.symtab' contains 5 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 00000000     0 SECTION LOCAL  DEFAULT    1
     2: 00000000     0 NOTYPE  GLOBAL DEFAULT    1 _binary_a_out_start
     3: 000014ce     0 NOTYPE  GLOBAL DEFAULT    1 _binary_a_out_end
     4: 000014ce     0 NOTYPE  GLOBAL DEFAULT  ABS _binary_a_out_size

まんま、仮想アドレス上の先頭位置にマップされていました.

なんでこんな実装に・・・

|

« 「ベターマン」 | トップページ | 「レコンキスタ(OPデモ)」(コットンソフト) »

Linux」カテゴリの記事

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/412869/6695901

この記事へのトラックバック一覧です: 実行ファイルへのバイナリの埋め込み:

« 「ベターマン」 | トップページ | 「レコンキスタ(OPデモ)」(コットンソフト) »