LinuxはELFを実行するときにロードアドレスとエントリポイントをどのように決定しますか?

LinuxはELFを実行するときにロードアドレスとエントリポイントをどのように決定しますか?

Linuxexecve()にELFがある場合は、そのELFをプロセスのメモリスペースにマップし、エントリポイントからコードを実行します。しかし、カーネルはELFのロードアドレスとエントリポイントをどのように決定しますか?

.p_vaddrASLRが無効になっている場合は、各PT_LOADセグメントを見つけて.e_entryELFヘッダーをエントリポイントとして使用します。

しかし、ASLRが有効になるとどうなりますか?カーネルは単に上記のすべてのアイテムにランダムな動きを追加しますが、相対位置は維持しますか?

ELFの内容がカーネルの動作に影響しますか? PT_LOADセグメントの最小値が.p_vaddrゼロまたはゼロでないかのように?たとえば、.e_typeELFヘッダーはET_DYNですか、それともET_EXECですか?

私は具体的にx86_64について話しています。

ベストアンサー1

おすすめ記事