Description
The dlmodinfo routine is one of a family of routines that give the user direct access to the dynamic linking facilities. The dlmodinfo routine retrieves information about a load module from a given address value. The dlmodinfo routine 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.
The read_tgm_mem parameter allows the dlmodinfo routine 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. The ip_value, load_map_parm, and ptr from read_tgt_mem parameters 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.
Using dlmodinfo to retrieve information about a load module
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 | long | handle; | 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);
}
}
The dlgetname Routine
The dlgetname routine retrieves the name of a load module given a load module descriptor.
Syntax
char *dlgetname(struct load_module_desc *desc, size_t desc_size,
void *(*read_tgt_mem)(void* buffer, unsigned long long ptr, size_t bufsiz,
int ident),
int ident_parm,
unsigned long long load_map_parm);
The dlopen Shared Library Management Routines 161