Chapter 6 251
Shared Library Management Routines
The dlopen Shared Library Management Routines
searches all currently loaded load modules looking for a load module
whose address range (address range of all loaded segments) holds the
given address value. The dlmodinfo routine fills the load_module_desc
with information from the matching load module.
read_tgm_mem allows dlmodinfo to find a load module in one process
on behalf of another. The calling process passes a callback via
read_tgt_mem in order to read memory in a different process address
space from the one in which dlmodinfo resides. ip_value,
load_map_parm, and ptr from read_tgt_mem can be pointers to shared
libraries in another process.
If the calling process calls dlmodinfo with a callback registered via
read_tgt_mem, it must supply the starting address of the target process’
load map in the load_map_parm parameter to dlmodinfo. This can be
retrieved from the DT_HP_LOAD_MAP entry in the .dynamic section in the
target executable file.
Example
The following code sequence shows how to use dlmodinfo to retrieve
information about a load module. In this example the dlmodinfo is
provided with the address of a function foo. The address of foo is
matched with the address range (the address range of all loaded
segments) of all load modules. The dlmodinfo fills in the
load_module_desc with information form the matching load module.
void foo()
{
printf(“foo\n”);
}
int retrieve_info()
{
unsigned longhandle;
struct load_module_desc desc;
handle = dlmodinfo((unsigned long) &foo,
&desc,
sizeof(struct load_module_desc),
NULL,
0,
0);
if (handle != 0) {
printf(“text base = %lx\n”, desc.text_base);
}
}