0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HelloWorld本 第8章

Last updated at Posted at 2024-04-02

ELF

Linuxはexecveシステムコールを用いて、ELFの実行ファイルを起動する。
セクションはリンク、セグメントはロードの単位である。
セクションヘッダは追加と削除の為、ファイルの終端付近に配置される。
プログラムヘッダは順次的なロードの為、ファイルの先頭付近に配置される。
/usr/include/elf.hは移植性を持ち、/usr/include/linux/elf.hは固有の定義を利用できる。

動的リンクと共有ライブラリ

動的リンクは位置独立なライブラリを利用し、ディスクを節約する。
共有ライブラリは仮想アドレスを利用し、ライブラリを共有してメモリを節約する。
共有ライブラリは動的リンクを必要とするが、動的リンクの対象が共有ライブラリである必要は無い。
汎用OSは仮想アドレスが標準であり、動的リンクと共有ライブラリが混同されやすい。
共有ライブラリは絶対アドレスで指定できない為、関数ポインタを利用する。
関数ポインタの配列をGOT(Global Offset Table)、GOTを呼ぶ処理をPLT(Procedure Linkage Table)と呼び、例えばprintfのPLTは以下である。

printf@plt:
    jmp  *GOTのアドレス   # 二回目以降
    push $GOTのオフセット # 一回目
    jmp  共通のアドレス解決ルーチン
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?