リンカ・ローダ 実践開発テクニック
[[ 坂井弘亮 ]]
- 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.