Interaction Between Controlling and Target Process
To be able to inspect and manipulate a target process, the rtld-debugger interface employs an exported interface, an imported interface, and agents for communicating between these interfaces.
The controlling process is linked with the rtld-debugger
interface provided by librtld_db.so.1
, and makes requests of
the interface exported from this library. This interface is defined in
/usr/include/rtld_db.h
. In turn,
librtld_db.so.1
makes requests of the interface imported
from the controlling process. This interaction allows the
rtld-debugger interface to perform the following.
-
Look up symbols in a target process.
-
Read and write memory in the target process.
The imported interface consists of a number of
proc_service
(3PROC) routines that most debuggers already employ to analyze
processes. These routines are described in Debugger Import Interface.
The rtld-debugger interface assumes that the process being analyzed is stopped when requests are made of the rtld-debugger interface. If this halt does not occur, data structures within the runtime linker of the target process might not be in a consistent state for examination.
The flow of information between librtld_db.so.1
, the
controlling process (debugger) and the target process (dynamic executable) is
diagrammed in the following figure.
rtld-debugger Information Flow
![rtld-debugger information flow. rtld-debugger information flow.](img/rtlddbg.jpg)
A sample implementation of a controlling process that uses the
rtld-debugger interface is provided in the
pkg:/source/demo/system
package under
/usr/demo/librtld_db
. This debugger,
rdb
, provides an example of using the
proc_service
imported interface, and shows the required
calling sequence for all librtld_db.so.1
exported interfaces.
The following sections describe the rtld-debugger interfaces. More
detailed information can be obtained by examining the sample debugger.