GNU ld 的 --audit 标志有什么作用?
What does the --audit flag to GNU ld do?
我有一个应用程序,我想在其中使用 Linux 提供的 rtld-audit
接口来挂钩 shared-library 加载过程。如果我使用 LD_AUDIT
环境变量告诉动态 linker 在我 运行 我的程序时使用我的审计库 audit.so
,这会很好用。
不过,我想让它更自动化一些,不需要特殊的环境设置。 GNUld
提供了一个--audit
标志,说明如下:
--audit AUDITLIB
Adds AUDITLIB to the "DT_AUDIT" entry of the dynamic section. AUDITLIB is not checked for existence, nor will it use the DT_SONAME specified in the library. If specified multiple times "DT_AUDIT" will contain a colon separated list of audit interfaces to use. If the linker finds an object with an audit entry while searching for shared libraries, it will add a corresponding "DT_DEPAUDIT" entry in the output file. This option is only meaningful on ELF platforms supporting the rtld-audit interface.
这向我建议,如果我 link 我的程序使用 --audit audit.so
,那么它应该将我的审计库与该程序相关联。我希望在程序 运行 时加载审计库。
果然,使用 readelf
,我可以验证使用这个标志会导致 audit.so
在 ELF header 中注册为审计库。但是,如果我 运行 我的程序没有 LD_AUDIT
设置,则永远不会调用审计库。似乎我必须设置 LD_AUDIT=audit.so
才能获得我想要的行为。
这引出了一个问题:--audit
标志实际上做了什么?上面引用的手册页之外的任何文档似乎都非常稀缺。我不清楚 Linux 动态加载器甚至使用 ELF header 中的 DT_AUDIT
字段。这是设计使然吗?
This begs the question: what does the --audit flag actually do?
设置了DT_AUDIT
动态入口,有心人关注
问题是(从 current trunk 开始)GLIBC 动态加载器 没有 关注它(寻找 process_dl_audit
例程)。它只关注 LD_AUDIT
环境变量,并在加载程序时关注 --audit
标志: ld.so
直接调用。
除非有人贡献代码也关注 DT_AUDIT
,否则 ld
的 --audit
标志将保持无用。
我有一个应用程序,我想在其中使用 Linux 提供的 rtld-audit
接口来挂钩 shared-library 加载过程。如果我使用 LD_AUDIT
环境变量告诉动态 linker 在我 运行 我的程序时使用我的审计库 audit.so
,这会很好用。
不过,我想让它更自动化一些,不需要特殊的环境设置。 GNUld
提供了一个--audit
标志,说明如下:
--audit AUDITLIB
Adds AUDITLIB to the "DT_AUDIT" entry of the dynamic section. AUDITLIB is not checked for existence, nor will it use the DT_SONAME specified in the library. If specified multiple times "DT_AUDIT" will contain a colon separated list of audit interfaces to use. If the linker finds an object with an audit entry while searching for shared libraries, it will add a corresponding "DT_DEPAUDIT" entry in the output file. This option is only meaningful on ELF platforms supporting the rtld-audit interface.
这向我建议,如果我 link 我的程序使用 --audit audit.so
,那么它应该将我的审计库与该程序相关联。我希望在程序 运行 时加载审计库。
果然,使用 readelf
,我可以验证使用这个标志会导致 audit.so
在 ELF header 中注册为审计库。但是,如果我 运行 我的程序没有 LD_AUDIT
设置,则永远不会调用审计库。似乎我必须设置 LD_AUDIT=audit.so
才能获得我想要的行为。
这引出了一个问题:--audit
标志实际上做了什么?上面引用的手册页之外的任何文档似乎都非常稀缺。我不清楚 Linux 动态加载器甚至使用 ELF header 中的 DT_AUDIT
字段。这是设计使然吗?
This begs the question: what does the --audit flag actually do?
设置了DT_AUDIT
动态入口,有心人关注
问题是(从 current trunk 开始)GLIBC 动态加载器 没有 关注它(寻找 process_dl_audit
例程)。它只关注 LD_AUDIT
环境变量,并在加载程序时关注 --audit
标志: ld.so
直接调用。
除非有人贡献代码也关注 DT_AUDIT
,否则 ld
的 --audit
标志将保持无用。