Register for your free account! | Forgot your password?

You last visited: Today at 14:13

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



PE Format

Discussion on PE Format within the Coding Tutorials forum part of the General Coding category.

Reply
 
Old   #1
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
PE Format

und hallo!
ich habe ewig nach infos zum pe format gesucht aber nur sehr mühsam und nach langer zeit gefunden was ich brauchte!
genau aus dem grund schreibe ich hier meine erfahrungen zum thema PE, es soll kein tutorial werden, nur eine kleine übersicht!
ich werde auch kleine c++ codesnippets mit einfügen!
okey wie fang ich an... ich denke erstmal mit einer kleinen liste was ich alles schreibe:
- der dos header
- der nt header
- die sections

(hm das is weniger als ich gedacht habe )

- DER DOS HEADER -
dann starte ich mal!
hier gehts um den DOS header (auch bekannt als MZ header):
Code:
typedef struct _IMAGE_DOS_HEADER
{
     WORD e_magic;
     WORD e_cblp;
     WORD e_cp;
     WORD e_crlc;
     WORD e_cparhdr;
     WORD e_minalloc;
     WORD e_maxalloc;
     WORD e_ss;
     WORD e_sp;
     WORD e_csum;
     WORD e_ip;
     WORD e_cs;
     WORD e_lfarlc;
     WORD e_ovno;
     WORD e_res[4];
     WORD e_oemid;
     WORD e_oeminfo;
     WORD e_res2[10];
     LONG e_lfanew;
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
ich beschreibe hier die (für mich) relevanten einträge..
der wichtigste eintrag ist e_magic!
e_magic enthält 2 bytes (WORD) die bei einer ausführbaren datei 'MZ' sein müssen, sonst bricht der windoof-pe-loader die ausführung ab.
wie man dadraus erkennen kann: die signatur!
der 2. wichtige eintrag ist e_lfanew, e_lfanew enthält das offset zum eigentlich wichtigen header! (absolutes file offset)
das wars (aus meiner sicht) schon mit dem DOS header :>

- DER NT HEADER -
... besteht aus 2. headern und der PE signatur.
Code:
typedef struct _IMAGE_NT_HEADERS
{
     ULONG Signature;
     IMAGE_FILE_HEADER FileHeader;
     IMAGE_OPTIONAL_HEADER OptionalHeader;
} IMAGE_NT_HEADERS, *PIMAGE_NT_HEADERS;
Code:
typedef struct _IMAGE_FILE_HEADER
{
     WORD Machine;
     WORD NumberOfSections;
     ULONG TimeDateStamp;
     ULONG PointerToSymbolTable;
     ULONG NumberOfSymbols;
     WORD SizeOfOptionalHeader;
     WORD Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
Code:
typedef struct _IMAGE_OPTIONAL_HEADER
{
     WORD Magic;
     UCHAR MajorLinkerVersion;
     UCHAR MinorLinkerVersion;
     ULONG SizeOfCode;
     ULONG SizeOfInitializedData;
     ULONG SizeOfUninitializedData;
     ULONG AddressOfEntryPoint;
     ULONG BaseOfCode;
     ULONG BaseOfData;
     ULONG ImageBase;
     ULONG SectionAlignment;
     ULONG FileAlignment;
     WORD MajorOperatingSystemVersion;
     WORD MinorOperatingSystemVersion;
     WORD MajorImageVersion;
     WORD MinorImageVersion;
     WORD MajorSubsystemVersion;
     WORD MinorSubsystemVersion;
     ULONG Win32VersionValue;
     ULONG SizeOfImage;
     ULONG SizeOfHeaders;
     ULONG CheckSum;
     WORD Subsystem;
     WORD DllCharacteristics;
     ULONG SizeOfStackReserve;
     ULONG SizeOfStackCommit;
     ULONG SizeOfHeapReserve;
     ULONG SizeOfHeapCommit;
     ULONG LoaderFlags;
     ULONG NumberOfRvaAndSizes;
     IMAGE_DATA_DIRECTORY DataDirectory[16];
} IMAGE_OPTIONAL_HEADER, *PIMAGE_OPTIONAL_HEADER;
in der IMAGE_NT_HEADERS struktur wird der Signatur wert auf 'PE' geprüft. wenn der nicht PE enthält -> abbrechen! (wie beim MZ)
was die anderen strukturen angeht sollten die einträge auch selbsterklärend sein! (bis hier kann man alles schnell nachgooglen!)
wirklich wichtig waren mir ImageBase und SizeOfImage!
bei ImageBase handelt es sich um die adresse, an die alles gemappt werden soll!
wenn man also code hat der an offset 0x1F steht (hier als beispiel einfach mal:
Code:
var1=var2;
) und ImageBase=0x00401000 ist (was dem standard entspricht), liegt der code an ImageBase+offset=0x0040101F! (dazu später mehr)
bei SizeOfImage handelt es sich ganz einfach um die summe der virtuellen grösse aller sections!
(auch das lässt sich bis hier noch alles nachgooglen!)

- DIE SECTIONS -
hier gehts schon in den schwierigeren bereich!
direkt nach dem nt header folgen die sections, ein array aus dem IMAGE_SECTION_HEADER mit der grösse von ntheader.FileHeader.NumberOfSections...
Code:
typedef struct _IMAGE_SECTION_HEADER
{
     UCHAR Name[8];
     ULONG Misc;
     ULONG VirtualAddress;
     ULONG SizeOfRawData;
     ULONG PointerToRawData;
     ULONG PointerToRelocations;
     ULONG PointerToLinenumbers;
     WORD NumberOfRelocations;
     WORD NumberOfLinenumbers;
     ULONG Characteristics;
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
Name gibt hier (wie man sich wohl denken kann) den namen der section!
Misc ist zur ladezeit die virtuelle grösse der section und nach dem laden die eigentliche adresse zu der section!
VirtualAddress ist das offset, an das die section geladen werden soll (ImageBase+VirtualAddress=addresse)!
SizeOfRawData gibt die grösse der section in der datei an...
PointerToRawData gibt das offset zu der section in der datei an!

und das war jetzt die zusammenfassung was wozu gut ist (im bereich bearbeiten und nicht erstellen)

ich werde das hier evtl. noch ein wenig erweitern...
Tyrar is offline  
Thanks
1 User
Old 09/16/2011, 23:04   #2


 
Ende!'s Avatar
 
elite*gold: 1
Join Date: Feb 2009
Posts: 6,378
Received Thanks: 7,996
Im- und Export-Table wären sicher noch interessant für viele Leute, die nach deutschen Texten zum PE-Header suchen.




Anhand dieses Textes habe ich mir 'damals' das Format des PE-Headers zu Gemüte geführt - ist allerdings nichts für Leute, die Probleme mit dem Verstehen komplexer englischer Texte haben. Ich denke mal, dass du diese bereits kennst - ich poste das hier eher zur Information für die Leute, die gerade erst begonnen haben sich in diese Thematik einzulesen.

Ansonsten eine nette Zusammenfassung der Kernelemente des Headers. ;)
Ende! is offline  
Old 09/17/2011, 13:06   #3
 
elite*gold: 0
Join Date: Nov 2010
Posts: 27
Received Thanks: 7
Guck mal hier:








Da solltest du genug zu dem Thema finden ...
Asul on frenzy is offline  
Old 09/18/2011, 03:37   #4
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
Originally Posted by Ende! View Post
Im- und Export-Table wären sicher noch interessant für viele Leute, die nach deutschen Texten zum PE-Header suchen.




Anhand dieses Textes habe ich mir 'damals' das Format des PE-Headers zu Gemüte geführt - ist allerdings nichts für Leute, die Probleme mit dem Verstehen komplexer englischer Texte haben. Ich denke mal, dass du diese bereits kennst - ich poste das hier eher zur Information für die Leute, die gerade erst begonnen haben sich in diese Thematik einzulesen.

Ansonsten eine nette Zusammenfassung der Kernelemente des Headers. ;)
Quote:
Originally Posted by Asul on frenzy View Post
Guck mal hier:








Da solltest du genug zu dem Thema finden ...
die msdn seiten hatte ich erst sehr spät gefunden gehabt (was mich sehr wundert )

evtl. erweiter ich das ganze noch etwas, nur im moment hab ich wenig zeit für das ganze
Tyrar is offline  
Reply


Similar Threads Similar Threads
Welchen Format..?
05/02/2011 - Metin2 Private Server - 1 Replies
Soo da meine letzte frage nicht beantwortet wurde...wollte ich mal ganz simpel fragen..in welchen Format die Gemoddeten rüssis müssen also Paint.net.. wenn ich es abgespeichert habe,habe ich es immer bei dem 3ten von oben in DXT5..ist das richtig so? weil ich denke wenn es falsch ist,ist meine Frage beantwortet warum die rüssis IG nicht angezeigt werden:D Mfg=)
[HELP]Asking for SD hack in .dll format
02/08/2011 - Grand Chase Philippines - 3 Replies
ummm .. guys i really really need some Sd hack in .dll format. can you pm me the dl link... tnx in advance! ^^'''
What is the format of this
04/12/2010 - CO2 Private Server - 5 Replies
ok so I have a Item.ini witch I need to double the defence and attack of 300000 13 3600 500 500 0 500 0 4500 120 300000 14 4200 700 700 0 700 0 5000 180 300000 15 5000 1000 1000 0 1000 0 6000 200 480339 13 255 2500 2450 4937 3000 3045 0 0 480339 14 255 2950 2900 5937 3000 5045 0 0 480339 15 255 3200 3100 6937 3000 6045 0 0 410339 13 255 2900 2850 4937 3000 3045 0 0
Does any have co2 in .rar format
07/14/2007 - Conquer Online 2 - 1 Replies
in the site it takes time can any1 give me the setup in .rar format plus karma to the guy who gives it
.wdf format
01/23/2006 - Conquer Online 2 - 0 Replies
I need viewer or decrypter .... What s program !



All times are GMT +1. The time now is 14:14.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.