要检查和处理目标进程, rtld-debugger 接口需要使用导出接口、导入接口以及代理在这些接口之间进行通信。
控制进程与 librtld_db.so.1 所提供的 rtld-debugger 接口链接,并会请求从该库导出的接口。此接口在 /usr/include/rtld_db.h 中定义。与此相反,librtld_db.so.1 会请求从控制进程导入的接口。通过此交互,rtld-debugger 接口可以执行以下操作:
在目标进程中查找符号。
在目标进程中读写内存。
导入接口由许多 proc_service 例程组成,大多数调试器已经使用这些例程来分析进程。这些例程将在调试器导入接口中进行介绍。
rtld-debugger 接口假定请求 rtld-debugger 接口时会停止进程分析。如果未停止分析,则目标进程的运行时链接程序内的数据结构在检查时可能处于不一致状态。
下图中显示了 librtld_db.so.1、控制进程(调试器)和目标进程(动态可执行文件)之间的信息流程。
rtld-debugger 接口依赖于 proc_service 接口 /usr/include/proc_service.h,后者被视为实验接口。rtld-debugger 接口可能必须跟踪 proc_service 接口在发展中的变化。
/usr/demo/librtld_db 下的 SUNWosdem 软件包中提供了使用 rtld-debugger 接口的控制进程的实现样例。 此调试器 rdb 提供了使用 proc_service 导入接口的示例,并说明了所有 librtld_db.so.1 导出接口所需的调用顺序。以下各节介绍 rtld-debugger 接口。可以查看调试器样例,获取更多详细信息。