Advertisement
Guest User

Enumerate sections C Windows API

a guest
Dec 2nd, 2017
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.68 KB | None | 0 0
  1. void EnumSections(char* file) {
  2.     FILE *hFile = fopen(file, "rb");
  3.     if (hFile != NULL) {
  4.         if (fgetc(hFile) == 'M' && fgetc(hFile) == 'Z') {
  5.             unsigned int e_lfanew = 0;
  6.             unsigned int NumberOfRvaAndSizes = 0;
  7.             unsigned int ExportVirtualAddress = 0;
  8.             unsigned int ExportSize = 0;
  9.             int i = 0;
  10.             fseek(hFile, 0x3C, SEEK_SET);
  11.             fread(&e_lfanew, 4, 1, hFile);
  12.             fseek(hFile, e_lfanew + 6, SEEK_SET);
  13.             fread(&NumberOfSections, 2, 1, hFile);
  14.             fseek(hFile, 108, SEEK_CUR);
  15.             fread(&NumberOfRvaAndSizes, 4, 1, hFile);
  16.             if (NumberOfRvaAndSizes == 16) {
  17.                 fread(&ExportVirtualAddress, 4, 1, hFile);
  18.                 fread(&ExportSize, 4, 1, hFile);
  19.                 if (ExportVirtualAddress > 0 && ExportSize > 0) {
  20.                     fseek(hFile, 120, SEEK_CUR);
  21.                     if (NumberOfSections > 0) {
  22.                         printf("addr       size     section\n");
  23.                         sections = (sectionHeader *)malloc(NumberOfSections * sizeof(sectionHeader));
  24.                         for (i = 0; i < NumberOfSections; i++) {
  25.                             fread(sections[i].Name, 8, 1, hFile);
  26.                             fread(&sections[i].VirtualSize, 4, 1, hFile);
  27.                             fread(&sections[i].VirtualAddress, 4, 1, hFile);
  28.                             fread(&sections[i].SizeOfRawData, 4, 1, hFile);
  29.                             fread(&sections[i].PointerToRawData, 4, 1, hFile);
  30.                             fread(&sections[i].PointerToRelocations, 4, 1, hFile);
  31.                             fread(&sections[i].PointerToLineNumbers, 4, 1, hFile);
  32.                             fread(&sections[i].NumberOfRelocations, 2, 1, hFile);
  33.                             fread(&sections[i].NumberOfLineNumbers, 2, 1, hFile);
  34.                             fread(&sections[i].Characteristics, 4, 1, hFile);
  35.                             printf("0x%07x  %07d  %s\n", sections[i].VirtualAddress, sections[i].VirtualSize, sections[i].Name);
  36.                         }
  37.                     }
  38.                 }
  39.             }
  40.         }
  41.         fclose(hFile);
  42.     }
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement