链接程序和库指南

创建审计库

审计库的生成方式与其他任何共享库的生成方式相同。但是,必须注意进程内审计库名称空间的唯一性。

如果审计库调用 printf(3C),则审计库必须定义与 libc 之间的依赖性。请参见生成共享库输出文件。由于审计库具有唯一的名称空间,因此,所审计的应用程序中提供的 libc 无法满足符号引用。如果审计库依赖于 libc,则会向进程中装入两种版本的 libc.so.1。一种版本用于满足应用程序链接映射列表的绑定要求,另一种版本用于满足审计链接映射列表的绑定要求。

要确保生成的审计库会记录所有的依赖项,请使用链接编辑器的 -z defs 选项。

部分系统接口会假定其是进程内实现的唯一实例,例如信号和 malloc(3C)。审计库应该避免使用此类接口,因为这样做可能会无意中更改应用程序的行为。


注 –

审计库可以使用 mapmalloc(3MALLOC) 来分配内存,因为此分配方法可以与应用程序通常使用的任何分配方案同时存在。