EN JA
DL_ITERATE_PHDR(3)
DL_ITERATE_PHDR(3) FreeBSD Library Functions Manual DL_ITERATE_PHDR(3)

名称

dl_iterate_phdrプログラムヘッダで繰り返す

ライブラリ

動的にリンクされたバイナリについて、サービスは、 ld-elf.so.1(1) ダイナミックリンカによって提供されます。静的にリンクされたプログラムは、libc の dl_iterate_phdr() の実装を使用します。

書式

#include < link.h>

int
dl_iterate_phdr( int (*callback)(struct dl_phdr_info *, size_t, void *), void *data);

解説

dl_iterate_phdr() 関数は、オブジェクトごとに callback を呼び出し、オブジェクトのプログラムヘッダと data 引数に関する情報を渡して、プロセスのアドレス空間にロードされたすべての ELF オブジェクトで繰り返します。繰り返しは、すべてのオブジェクトが渡されるとき、または、次の callback 呼び出しが 0 以外の値を返すとき、異常終了します。プログラムヘッダに関する情報は、次のように定義される構造体で渡されます:

struct dl_phdr_info { 
 Elf_Addr dlpi_addr; 
 const char *dlpi_name; 
 const Elf_Phdr *dlpi_phdr; 
 Elf_Half dlpi_phnum; 
 unsigned long long int dlpi_adds; 
 unsigned long long int dlpi_subs; 
 size_t  dlpi_tls_modid; 
 void  *dlpi_tls_data; 
};

struct dl_phdr_info のメンバには、次の意味があります:

dlpi_addr
オブジェクトが、呼び出しているプロセスのアドレス空間にマップされるベースアドレス。
dlpi_name
ELF オブジェクトの名前。
dlpi_phdr
オブジェクトのプログラムヘッダへのポインタ。
dlpi_phnum
オブジェクト中のプログラムヘッダの数。
dlpi_adds
ダイナミックリンカによって実行されるオブジェクトのロードのカウンタ。
dlpi_subs
ダイナミックリンカによって実行されるオブジェクトのアンロードのカウンタ。
dlpi_tls_modid
オブジェクトの TLS インデックス。
dlpi_tls_data
オブジェクト TLS セグメントのための初期化データへのポインタ。

FreeBSD の将来バージョンは、この構造体に、より多くのメンバを追加するかもしれません。プログラムにいずれかの新しいメンバが追加されたかどうかチェックすることを可能にするために、構造体のサイズが callback への 2 番目の引数として渡されます。

コールバックへの 3 番目の引数は、 callback がコンテキストを持つことを可能にする dl_iterate_phdr() への呼び出しに渡される data 値です。

戻り値

dl_iterate_phdr() は、実行された最後の callback 呼び出しによって返された値を返します。

歴史

dl_iterate_phdr 関数は、 FreeBSD 7.0 ではじめて登場しました。
February 15, 2012 FreeBSD