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 |