最初のページ 戻る 次へ 最後のページ 目次 図
バイナリ起動の流れ
- プログラムから新しいプログラム用のプロセスを fork
- プログラムから execve(ファイル名, ...) システムコールを発行
- カーネルは現在のプロセスをファイル名の実行バイナリへ入れ替え
- ファイルの先頭ヘッダを見て、タイプ毎に起動するプログラムを変える
- #!/bin/sh の場合: /bin/sh を起動して 7 に飛ぶ
- 静的バイナリの場合: そのまま実行を開始して 7 に飛ぶ
- ELF動的バイナリの場合 INTERP セクションに書いてある動的ローダを起動
- i386 の場合: /lib/ld-linux.so.2
- amd64の場合: /lib64/ld-linux-x86-64.so.2
動的ローダは NEEDED セクションに書いてあるライブラリを解決、同じバイナリ内部にマップする(32か64かを検索するのは動的ローダ)
- 例: libc.so.6 等 (readelf -a | grep NEEDED)
プログラムを実行へ移す
5,6でビット幅が違うものを混ぜることができない