#include <stdio.h> | |
#include <asm/page.h> | |
#include <sys/mman.h> | |
#include <strings.h> | |
/* | |
* Finds a given address in the System.map and prints it out | |
* with its neighbors. -- Cort | |
*/ | |
int main(int argc, char **argv) | |
{ | |
unsigned long addr, cmp, i; | |
FILE *f; | |
char s[256], last[256]; | |
if ( argc < 2 ) | |
{ | |
fprintf(stderr, "Usage: %s <address>\n", argv[0]); | |
return -1; | |
} | |
for ( i = 1 ; argv[i] ; i++ ) | |
{ | |
sscanf( argv[i], "%0lx", &addr ); | |
/* adjust if addr is relative to kernelbase */ | |
if ( addr < PAGE_OFFSET ) | |
addr += PAGE_OFFSET; | |
if ( (f = fopen( "System.map", "r" )) == NULL ) | |
{ | |
perror("fopen()\n"); | |
exit(-1); | |
} | |
while ( !feof(f) ) | |
{ | |
fgets(s, 255 , f); | |
sscanf( s, "%0lx", &cmp ); | |
if ( addr < cmp ) | |
break; | |
strcpy( last, s); | |
} | |
printf( "%s%s", last, s ); | |
} | |
fclose(f); | |
return 0; | |
} |