リンカ・ローダ 実践開発テクニック

[[ 坂井弘亮 ]]

  • a.out は Assembler OUTput という形式
  • man だけでなく info も
  • /vmlinux はカーネルローダ(=ブートローダ!)が使うELF形式のカーネル
  • カーネルローダは zImage.elf
  • 割り込みベクタ?
  • ELF
    • セグメントはロードに使う
      • ロードできない.oなどはプログラムヘッダテーブルを持たない
    • セクションはリンクに使う
      • セクションヘッダテーブル
    • .rel.XXX .rela.XXX
  • ABI バイナリレベルでのOSの呼び出し規約 システムコールに使うint 0x80など
    • アーキテクチャが同じでも Linux/i386 のバイナリを FreeBSD/i386 では動かせない(ABIが違うので)→Linux用のABIを使うようにカーネルがよしなにやってくれる
  • API ソースコードレベル(Cとか)のOSの呼び出し規約 POSIX で定義
  • 仮想メモリ
    • セグメント方式
    • ページング方式
      • CPU内蔵のMMU
      • 4KB, 4MBごとに区切ってテーブルを管理
  • GOT
    • 再配置され、シンボルの実際のアドレスの配列になる
    • 位置独立コード(PIC)について、シンボル解決が必要な部分を.textから切り離すのが目的
  • PLT
    • 遅延リンクが目的
    • 関数本体へのジャンプコードの配列
    • PLT から GOT に入った実アドレスを読み出し、jmp

Backlinks

There are no notes linking to this note.