Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten
Autor
Nachricht
HaXx0r
Tutorial Leser
Tutorial Leser

Anmeldedatum: 01.05.2008
Beiträge: 25

Dateigröße aus PE-Header auslesen
Verfasst am: 27.06.2008, 09:20

Joa, ich möchte gerne wissen, wie man die Größe der Datei aus dem PE-Header auslesen kann. Ich hoffe es kann mir jemand helfen.

PS: Muss nicht in VB sein, kann auch in Delphi sein :p

Danke im Voarus, HaX
 
Hamtaro
Tutorial Leser
Tutorial Leser

Anmeldedatum: 17.04.2008
Beiträge: 29


Verfasst am: 27.06.2008, 09:41

Also der Pe Header kommt ja nach dem DosHeader, seine Position ist im DosHeader mit der Eigenschaft e_lfanew angegeben.

PeHeader = DosHeader + DosHeader.e_lfanew

Die Dateigröße wirst du allerdings nicht im PEHeader finden, da die im Prinzip nix ausmacht. Du kannst ja an eine Exedatei noch beliebig viele Informationen anhängen (Builder), ohne dass sich für das Ausführen etwas verändert, im OptionalHeader (OptionalHeader = PEHeader + SizeOf(PeHeader)) steht aber die Endgröße der Datei im Speicher, die ja auch allein wichtig ist für den PE Loader. Möglicherweise kannst du aber die effektive Dateigröße errechnen, indem du die Größe aller Header mit der RawSize aller Sections addierst
Was bezweckst du denn gib doch mal mehr Details?
Gut zum Lesen: http://msdn.microsoft.com/en-us/library/ms809762.aspx
 
HaXx0r
Tutorial Leser
Tutorial Leser

Anmeldedatum: 01.05.2008
Beiträge: 25


Verfasst am: 27.06.2008, 10:20

Also ich habe vor, ein programm zu coden, was alle möglichen Informationen, die in der .exe drinstehen, ausliest und ausgibt.

So, nun wieder zu deinem sehr nützlichen Post:

Also ich möchte die Dateigröße OHNE die angehangenen Informationen durch z.B. einen Builder herausfinden. Dazu hast du auchschon was gesagt, nurnochmal das es alle wissen. Danke Hamtaro!!!
Ich probiere dann mal einwenig weiter, jedoch weiß ich überhauptnicht wie ich überhaupt an den PE-Header rankomme :confused:[img]/ohmy.gif[/img] ?!
 
Hamtaro
Tutorial Leser
Tutorial Leser

Anmeldedatum: 17.04.2008
Beiträge: 29


Verfasst am: 27.06.2008, 14:00

Hier mal ne nützliche Unit, in der die ganzen Typen und einige wichtige Funktionen enthalten sind.
Es funktioniert ungefähr so:
Du lädst mit Readfile die Datei in den Speicher (Bytearray), dann CopyMemory vom Bytearray zu deiner DOSHeader Struktur, die Länge muss die des DOSHeaders sein( Len(TDosHeader) ), dann hast du schonmal den DOS header, in dem Steht aber kaum was interessantes drin, danach kommt die MSDOS Stub, ein kleines DOS-Programm das einfach nur sagt: "Hey, dieses Programm ist für Windows, nicht für DOS", da die MSDOS Stub aber unterschiedlich lang sein kann, wird der Beginn des PE-headers im Feld e_lfanew angegeben, zu dem PE Header kommst du, indem du mit CopyMemory von dem Bytearray + e_lfanew zu deiner PE-Header struktur kopierst, Länge ist die der PE-Header struktur.
 
HaXx0r
Tutorial Leser
Tutorial Leser

Anmeldedatum: 01.05.2008
Beiträge: 25


Verfasst am: 28.06.2008, 08:15

So, danke für deine Hilfe Hamtaro! Habe es jetzt hinbekommen:

Visual Basic: [code]SectionHeader.PointerToRawData + SectionHeader.SizeOfRawData[/code]

Das ist die Größe ohne die angehangenen Daten:

Visual Basic: [code]dwFileSize - dwOrginalFileSize[/code]

Natürlich habe ich das nicht alleine geschrieben, sondern habe eine Function gefunden, nur weiß ich nicht genau, wie ich sie jetzt aufrufen soll in der TForm Create [img]/ohmy.gif[/img]:

Visual Basic: [code]function GetSettingsData(FileName: string; var lpData: Pointer; var dwSettingsLen: DWORD): Boolean;[/code]

Mit welchen Params muss ich den server denn jetzt aufrufen? Ich habs so versucht (habe das so stumpf in die TForm Create geschrieben):

Visual Basic: [code]GetSettingsData('C:blub.exe')[/code]

die Entwircklungsumgebung sag mir nun, wenn ich es comilieren will, dass nicht genug Parameter vorhanden sind.

Kannst du mir helfen, denn ich weiß nicht was ich mit Visual Basic: [code]var lpData: Pointer; var dwSettingsLen: DWORD[/code] anfangen soll ?!
 
noname
Poster
Poster

Anmeldedatum: 01.05.2008
Beiträge: 131


Verfasst am: 28.06.2008, 13:59


Ich hoffe du weisst das das keine VB6 Funktion ist. Das sieht eher nach einer C Sprache aus.
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten

Tags: auslesen, dateigröße, delphi, größe, datei

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge [Probleme]Hoffe Auf schnelle Antwort 471 16.07.2009, 22:08
Keine neuen Beiträge Frage um mein wissen zu erweitern 556 22.10.2007, 16:58
Keine neuen Beiträge Mit Dateien arbeiten: Lehrzeile in Datei schreiben 599 19.03.2007, 16:45
Keine neuen Beiträge Textbox an php datei 753 23.02.2007, 21:09
Keine neuen Beiträge Datei einlesen.... 829 28.01.2007, 05:21
 


[ Time: 0.1751s ][ Queries: 95 (0.1018s) ][ GZIP on - Debug on ]