das ist ein tut für erfahrene user, und auch kein copy & paste tut
die vorraussetzungen hierfür sind:
grundkenntnisse über den aufbau des PE formats (wobei ich darauf nochmal kurz eingehe)
filemapping (auf bestimmte adressen zugreifen) ODER kompliziertes normales file handling.
etwas methematik wissen
was ihr besitzen solltet:
einen pc
eine gute IDE
windows.h, winnt.h
und eine test.exe
die theorie:
in der theorie ist alles wie immer ganz einfach.
man öffnet die datei, liest die wichtigen header ein (DOS, PE), und dann liest man die section header.
das wars sogar schon mit der theorie o.O
die praxis:
in der praxis ist es in diesem fall genau so einfach wie in der theorie.
als erstes muss die datei via CreateFile geöffnet, via CreateFileMapping gemappt, und mit MapViewOfFile der pointer geholt werden.
zum start der datei steht der MZ (DOS) header. den liest man ganz einfach mit
Code:
PIMAGE_DOS_HEADER dos = (PIMAGE_DOS_HEADER)ptr;
um zu prüfen ob das überhaupt eine "echte" datei ist, muss e_magic im header überprüft werden. (abgleich mit IMAGE_DOS_SIGNATURE)
am offset 0x3C steht ein DWORD mit dem offset des PE headers. (oder einfach nur e_lfanew aus dem dos header)
mit
Code:
PIMAGE_NT_HEADERS nt = (PIMAGE_NT_HEADERS)(ptr+dos->e_lfanew);
dieser wird ebenfalls überprüft. (nt->Signature==IMAGE_NT_SIGNATURE)
von nun an wird alles ganz einfach: es gibt ein macro, mit dem man den header der ersten section bekommt:
Code:
PIMAGE_SECTION_HEADER pSection = (PIMAGE_SECTION_HEADER)IMAGE_FIRST_SECTION(nt);
mit pSection++ kann man direkt auf die nächste section zugreifen
pSection->Name ist ein 8 byte array mit dem namen der section
hoffe mal dass es wenigstens einer von euch versteht, und es auch geholfen hat XD






