printf(" STORAGE "); |
|
|
} |
|
|
if ((flags & EXPORT_SYMBOLS) | /* export symbols requested | */ |
&& (flags & NO_VALUES)==0) | /* NO_VALUES was NOT specified */ | |
printf(" 0x%8X", | ||
printf("\n"); | /* terminate output line | */ |
symbols++; | /* move to next symbol record | */ |
} |
|
|
free(orig_symbols); | /* free memory allocated by malloc */ | |
return num_symbols; | /* return the number of symbols */ |
|
}
The following example shows the source for a program named show_all.c that calls
show_symbols to show all imported and exported symbols for every loaded shared library. It uses shl_get to get the library handles of all loaded libraries.
show_all - Use show_symbols to Show All Symbols
#include <dl.h> #include <stdio.h>
/* prototype for show_syms */
int show_syms(shl_t hndl, short type, int flags); main()
{
int idx, num_syms;
struct shl_descriptor * desc;
for (idx=0; shl_get(idx, &desc) !=
{
printf("[%s]\n",
num_syms =
printf(" | TOTAL SYMBOLS: %d\n", num_syms); |
printf(" | Exports:\n"); |
num_syms | = |
printf(" | TOTAL SYMBOLS: %d\n", num_syms); |
}
}
The show_all program shown above was compiled with the command:
$ cc
NOTE: The following output for the example differs in Itanium/PA64 mode. For example, STORAGE is not supported.
The output produced by running this program is shown below:
[show_all]
Imports: |
|
|
errno | STORAGE |
|
_start | PROCEDURE |
|
malloc | PROCEDURE |
|
free | PROCEDURE |
|
exit | PROCEDURE |
|
printf | PROCEDURE |
|
shl_get | PROCEDURE |
|
shl_getsymbols | PROCEDURE |
|
__d_trap | PROCEDURE |
|
TOTAL SYMBOLS: 9 |
|
|
Exports: |
|
|
environ | DATA | 0x40001018 |
errno | STORAGE | 0x400011CC |
_SYSTEM_ID | DATA | 0x40001008 |
__dld_loc | STORAGE | 0x400011C8 |
_FPU_MODEL | DATA | 0x4000100C |
_end | DATA | 0x400011D0 |
_environ | DATA | 0x40001018 |
__d_trap | PROCEDURE | 0x7AFFF1A6 |
main | PROCEDURE | 0x7AFFF1BE |
The shl_load Shared Library Management Routines 181