#!/usr/bin/perl
#
use DynaLoader;
push(@dl_library_path,'/lib');
my $symbol=$ARGV[0];
@dl_resolve_using = DynaLoader::dl_findfile(qw(-ldl -lc));
my $lib_name='/lib/libc.so.6';
my $libref=DynaLoader::dl_load_file($lib_name,0x00001);
if (not defined $libref) { die "load lib: $! \n";}
my $symref =DynaLoader::dl_find_symbol($libref, $symbol);
#$symref -= 0x74000;
printf "%s : %4x \n",$symbol,$symref;
####
int search(char *pattern)
{
void *p;
int addr;
/* dlopen() the main program */
if ( !(p = dlopen(NULL, RTLD_LAZY)) ) {
fprintf(stderr, "%s\n", dlerror());
exit(-1);
}
/* search for the pattern */
if ( !(addr = (int)dlsym(p, pattern)) ) {
fprintf(stderr, "%s\n", dlerror());
exit(-1);
}
dlclose(p);
return(addr);
}
####
$ ./lib.pl system
system : 0x400c52f0
$ ./libcs -s system
system: 0x400512f0
$ ./lib.pl printf
printf : 0x400d0d44
$ ./libcs -s printf
printf: 0x4005cd44