Guest User

Untitled

a guest
Dec 12th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdint.h>
  4. #include <elf.h>
  5.  
  6. int
  7. main (int argc, char **argv)
  8. {
  9. FILE *f_in = fopen(argv[1], "rb");
  10. Elf32_Ehdr hdr;
  11. Elf32_Shdr cur, name_sh;
  12. char *name_section = NULL;
  13. int ind;
  14. if (!f_in) {
  15. fprintf(stderr, "Couldn't open input file\n");
  16. return 1;
  17. }
  18. if ((fread(&hdr, sizeof(hdr), 1, f_in)) < 1) {
  19. fprintf(stderr, "Error while reading ELF Header\n");
  20. fclose(f_in);
  21. return 1;
  22. }
  23. if (hdr.e_ident[0] != '\x7f' || hdr.e_ident[1] != 'E' ||
  24. hdr.e_ident[2] != 'L' || hdr.e_ident[3] != 'F') {
  25. fprintf(stderr, "Not an ELF file\n");
  26. fclose(f_in);
  27. return 1;
  28. }
  29. if (hdr.e_ident[4] != 1 || hdr.e_ident[5] != 2 || hdr.e_ident[6] != 1) {
  30. fprintf(stderr, "Not supported ELF file\n");
  31. fclose(f_in);
  32. return 1;
  33. }
  34. printf("TYPE: ");
  35. switch (hdr.e_type) {
  36. case 1:
  37. printf("REL\n");
  38. break;
  39. case 2:
  40. printf("EXEC\n");
  41. break;
  42. case 3:
  43. printf("DYN\n");
  44. break;
  45. case 4:
  46. printf("CORE\n");
  47. break;
  48. default:
  49. printf("NONE\n");
  50. break;
  51. }
  52. printf(" NAME ADDR OFFSET SIZE ALGN\n");
  53. fseek(f_in, hdr.e_shoff + hdr.e_shstrndx * sizeof(cur), SEEK_SET);
  54. fread(&name_sh, sizeof(name_sh), 1, f_in);
  55. name_section = (char *) calloc(name_sh.sh_size, sizeof(char));
  56. fseek(f_in, name_sh.sh_offset, SEEK_SET);
  57. fread(name_section, name_sh.sh_size, 1, f_in);
  58. fseek(f_in, hdr.e_shoff + sizeof(cur), SEEK_SET);
  59. for (ind = 1; ind < hdr.e_shnum; ind++) {
  60. fread(&cur, sizeof(cur), 1, f_in);
  61. printf("%20s 0x%08x %10d %10d 0x%04x\n", name_section + cur.sh_name,
  62. cur.sh_addr, cur.sh_offset, cur.sh_size, cur.sh_addralign);
  63. }
  64. free(name_section);
  65. fclose(f_in);
  66. return 0;
  67. }
Add Comment
Please, Sign In to add comment