Quote:
Originally Posted by DerkurvigeTyrann
Das ist mir soweit auch bekannt allerdings wechselt ja selbst dieser seine ansonsten fast immer statische Position
Leider nein da ich keine Text-Datei auslesen will, sondern ein Programm
Aber um meine Frage nochmal zu spezifizieren kennt hier irgendeine freundliche Seele eine Funktion die mir die am liebsten die einzelnen sections eines Programms aus dem PE-Header liest bzw. ihn zumindest finden könnte, da sobald ich die Adresse ,und sei es die des DOS-Headers, habe das ganze auch durch Offsets einfach auslesen könnte
|
natürlich kannst du mit fileread beliebige dateien einlesen...
hier ein einfaches beispiel, welches dir den dos-header ausliest:
Code:
#include <array.au3>
ReadPeHeader("foobar2000_v1.2.9.exe")
Func readPeHeader($file)
Local $hwnd = FileOpen($file, 16), $content = FileRead($hwnd, FileGetSize($file))
$DosHeader = reverseArray(StringRegExp($content, "0x(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{4})(.{16})", 3))
_ArrayDisplay($DosHeader)
EndFunc
Func reverseArray($array)
Local $size=UBound($array), $return[$size]
For $i=0 To $size-1
$return[$i]='0x'&trimZero(reverseHexString($array[$i]))
Next
Return $return
EndFunc
Func reverseHexString($hex, $tmp='')
If $hex='' Then Return $tmp
Return reverseHexString(StringTrimRight($hex,2), $tmp&StringRight($hex,2))
EndFunc
Func trimZero($string)
If $string='' Then Return '0'
If StringLeft($string,1)<>0 Then Return $string
Return trimZero(StringTrimLeft($string,1))
EndFunc
definiert ist der dos-header so:
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;