ldr.h 文件
用途
描述 ld_info 和 ld_xinfo 数据类型以及关联的装入程序入口点。
语法
#include < sys/ldr.h >
描述
/usr/include/sys/ldr.h 头文件包含 ld_info 和 ld_xinfo 数据结构的声明以及可用于进程和内核扩展的系统装入程序入口点。
ld_info 结构描述了在跟踪进程 (使用 跟踪 系统调用) 或检查核心文件的上下文中可装入的模块。 ldr.h 文件可以定义 ld_info 结构的 2 变体,一个用于描述 32 位进程 (__ld_info32) ,另一个用于描述 64 位进程 (__ld_info64)。 如果定义了 __LDINFO_PTRACE32__ 符号,那么 struct __ld_info32 类型也是如此。 如果定义了 __LDINFO_PTRACE64__ 符号,那么 struct __ld_info64 类型也是如此。 如果编译方式为 32 位,并且定义了 __LDINFO_PTRACE32__ 符号,那么 struct __ld_info32 和 struct ld_info 类型等效。 如果编译方式为 64 位,并且定义了 __LDINFO_PTRACE64__ 符号,那么 struct __ld_info64 和 struct ld_info 类型等效。
当在 32 位程序中使用 跟踪 来调试 64 位进程时,请定义 __LDINFO_PTRACE64__。 当在 64 位程序中使用 跟踪 来调试 32 位进程时,请定义 __LDINFO_PTRACE32__。
这些结构的字段的类型和大小取决于编译方式为 32 位还是 64 位。 在两种结构方式下都会生成相同的字段名称,但 64 位结构具有 ldinfo_flags 字段的情况除外。
__ld_info32 和 __ld_info64 结构包含所指示大小和类型的以下字段; 如果列示了两种类型,那么在编译方式为 32 位时将使用第一种类型,而在方式为 64 位时将使用第二种类型:
| 字段和描述 | __ld_info32 | __ld_info64 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ld_xinfo 结构与 ld_info 结构类似,但 ld_xinfo 结构具有用于定义线程本地存储器的模块的其他字段。 此外,所有字段都足够大,足以描述 64 位过程的区域,因此只有 ld_xinfo 结构的单个变体存在。
ld_xinfo 结构中的额外字段如下所示:
| 字段 | 描述 |
|---|---|
| ldinfo_tdatasize | .tdata 部分的大小。 |
| ldinfo_tbsssize | .tbss 部分的大小。 |
| ldinfo_tdataorg | .tdata的初始化模板的有效地址。 |
| ldinfo_tdataoff | 模块的线程本地存储器在其区域中的偏移量。 |
| ldinfo_tls_rnum | 线程本地存储区域号。 |
此外,在 ld_xinfo 结构中, ldinfo_filename 字段具有不同的解释。 此字段在 ld_xinfo 结构中的值是从结构开头到后跟以 null 结束的成员名的以 null 结束的路径名的偏移量。
int kmod_load(caddr_t path, uint flags, caddr_t libpath, mid_t *kmid);
int kmod_unload(mid_t kmid, uint flags);
void (*(kmod_entrypt(mid_t kmid, uint flags)))();
int ld_info(int __flags, pid_t __pid, void *__buffer, unsigned int __length);
__LOAD_T *load(char *__filenameparm, uint __flags, char *__libpathparm);
int loadbind(int __lflags, void *__exporter, void *__importer);
int unload(void *__function);
int loadquery(int __lflags, void *__buffer, unsigned int __length);
__handler_t *__lazySetErrorHandler( __handler_t *fp );