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