Obtaining information for each object maintained on the runtime linkers link-map (see "Establishing a Name-space") is achieved using the following structure (defined in rtld_db.h):
typedef struct rd_loadobj { psaddr_t rl_nameaddr; unsigned rl_flags; psaddr_t rl_base; psaddr_t rl_data_base; unsigned rl_lmident; psaddr_t rl_refnameaddr; psaddr_t rl_plt_base; unsigned rl_plt_size; psaddr_t rl_bend; psaddr_t rl_padstart; psaddr_t rl_padend; } rd_loadobj_t; |
Note that all addresses given in this structure, including string pointers, are addresses in the target process and not in the address space of the controlling process itself:
Pointer to a string which contains the name of the dynamic object.
Reserved for future use.
Base address of dynamic object.
Base address of data segment of dynamic object.
The link-map identifier (see "Establishing a Name-space").
If the dynamic object is a filter (see "Shared Objects as Filters") then this points to the name of the filtee(s).
These elements are present for backward compatibility and are currently unused.
End address of object (text + data + bss).
Base address of padding before dynamic object (refer to "Dynamic Object Padding").
Base address of padding after dynamic object (refer to "Dynamic Object Padding").
The following routine uses this object data structure to access information from the runtime linkers link-map lists:
typedef int rl_iter_f(const rd_loadobj_t *, void *); rd_err_e rd_loadobj_iter(rd_agent_t * rap, rl_iter_f * cb, void * clnt_data); |
This function iterates over all dynamic objects currently loaded in the target process. On each iteration the imported function specified by cb is called. clnt_data can be used to pass data to the cb call. Information about each object is returned via a pointer to a volatile (stack allocated) rd_loadobj_t structure.
Return codes from the cb routine are examined by rd_loadobj_iter() and have the following meaning:
1 - continue processing link-maps.
0 - stop processing link-maps and return control to the controlling process.
rd_loadobj_iter() returns RD_OK on success. A return of RD_NOMAPS indicates the runtime linker has not yet loaded the initial link-maps.