find_name.c 843 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include <stdio.h>
  2. #include <asm/page.h>
  3. #include <sys/mman.h>
  4. #include <strings.h>
  5. /*
  6. * Finds a given address in the System.map and prints it out
  7. * with its neighbors. -- Cort
  8. */
  9. int main(int argc, char **argv)
  10. {
  11. unsigned long addr, cmp, i;
  12. FILE *f;
  13. char s[256], last[256];
  14. if ( argc < 2 )
  15. {
  16. fprintf(stderr, "Usage: %s <address>\n", argv[0]);
  17. return -1;
  18. }
  19. for ( i = 1 ; argv[i] ; i++ )
  20. {
  21. sscanf( argv[i], "%0lx", &addr );
  22. /* adjust if addr is relative to kernelbase */
  23. if ( addr < PAGE_OFFSET )
  24. addr += PAGE_OFFSET;
  25. if ( (f = fopen( "System.map", "r" )) == NULL )
  26. {
  27. perror("fopen()\n");
  28. exit(-1);
  29. }
  30. while ( !feof(f) )
  31. {
  32. fgets(s, 255 , f);
  33. sscanf( s, "%0lx", &cmp );
  34. if ( addr < cmp )
  35. break;
  36. strcpy( last, s);
  37. }
  38. printf( "%s%s", last, s );
  39. }
  40. fclose(f);
  41. return 0;
  42. }