Using dladdr to get the symbolic information for an address
The following example shows how to use dladdr to:
#include <dlfcn.h>
typedef int (*fptr_t) (); int func1() {return 11;} int main()
{
D1_info di;
char* symname = (char*)strdup("func1"); if (dladdr(&func1, &di) == 0) {
printf("dladdr() failed for %s\n", symname); return 1;
}
if (di.dli_sname) {
fptr_t tmp = (fptr_t)dlsym(di.dli_fbase, symname); if (di.dli_saddr !=void *)&func1)
puts("approx match");
if (tmp != (fptr_t)di.dli_saddr) { printf("dlsym(%s): %s\n", symname, dlerror());
}
}
printf("%s: %s(%d %d %d)\n", di.dli_sname? di.dli_sname:"nil", di.dli_fname, di.dli_type, di.dli_bind, di.dli_size);
return 0;
}
The dlmodadd Routine
The dlmodadd routine registers information about
Syntax
void* dlmodadd(void *associate handle,
void *func_start, size_t func_size, void *linkage_ptr, void *unwind_info);
Table 31 Parameters
Parameter | Description |
|
|
associate | The module handle for an existing module with which the new function is associated. When the |
handle | dynamic loader is called from the new function, it behaves as if it had been called from the |
| associated module. This handle must be a handle returned by the dlopen() routine or the |
| dlget routine. |
|
|
func_start | The starting address of the generated machine code for the function. It is NOT the address of |
| a function descriptor. |
|
|
func_size | The size, in bytes, of the generated machine code. |
|
|
linkage_ptr | The global pointer (gp) value to be used for the function. It could be the gp of the associated |
| module. It must be set to a valid value, even if the generated code doesn't actually use gp, as |
| it is required at a minimum for following the personality routine pointer in the unwind information. |
|
|
unwind_info | A pointer to the beginning of the unwind info block for the function. The unwind info block |
| contains the header word, unwind descriptors, personality routine pointer, and |
| data, as described in the |
| document. |
|
|
Return Values
If successful, dlmodadd returns a handle as identification of the
The dlopen Shared Library Management Routines 165