.exe 3GB patch
-
Hi!
Ich hatte da mal so ein Tool, welches eine .exe patchen konnte, damit sie auf einem 32bit OS 3GB nutzen kann (3GB-Switch in der boot.ini vorausgesetzt, glaube ich).
Erstens hätte ich das Tool gerne wieder (War ne einfache .exe mit cmd-Parametern), aber viel lieber wüsste ich, wie man das selbst patchen kann.
-
http://www.3dcenter.org/artikel/das-large-address-aware-flag
...wenn du dein eigenes app flaggen willst:
http://msdn.microsoft.com/en-us/library/wz223b1z(VS.80).aspx
-
Danke, jetzt weiß ich aber immer noch nicht, wie ich eine .exe manuell patchen kann (C++ und WinAPI).
-
vergleich doch einfach im hex-editor eine gepatchte und eine ungepatchte. wird doch nur ein byte unterschiedlich sein.
-
Und würde dieses Byte immer an derselben Stelle sein, bei jeder .exe?
-
machs einfach, gugg nach!
-
lies Texte über das PE-Format, dann weißt du es
-
Ich frage aber hier, weil ich nicht erst alles über PE lernen möchte.
-
Das Stichwort "PE Format" ist der Goldene Taller. Such mal bei Google und RTFM
-
Zeigt mir bitte jemand, wie man in einer beliebigen .exe dieses Flag setzt?
-
Nein.
-
Hi
Mach einfach ein diffing von einer gepatchten exe und einer ungepatchten. Danach kannst du dir ein Patch für jede exe schreiben. Der PE header ist glaube ich 400byte gross. Irgendwo da wird sich dieses flag verstecken.
habe ich was übersehen ?Lowbyte
-
IMAGE_FILE_HEADER Structure: http://msdn.microsoft.com/en-us/library/ms680313(VS.85).aspx
IMAGE_FILE_LARGE_ADDRESS_AWARE Flag
-
helper.exe schrieb:
Nein.
Und du bist wer, dass du für alle sprichst?
Weiß jemand auswendig, wo die Struktur hinzeigen muss? Und wie könnte ich prüfen, ob die .exe auch valid ist, bevor ich patche?
-
aus winnt.h
2517 typedef struct _IMAGE_DOS_HEADER { 2518 WORD e_magic; /* 00: MZ Header signature */ 2519 WORD e_cblp; /* 02: Bytes on last page of file */ 2520 WORD e_cp; /* 04: Pages in file */ 2521 WORD e_crlc; /* 06: Relocations */ 2522 WORD e_cparhdr; /* 08: Size of header in paragraphs */ 2523 WORD e_minalloc; /* 0a: Minimum extra paragraphs needed */ 2524 WORD e_maxalloc; /* 0c: Maximum extra paragraphs needed */ 2525 WORD e_ss; /* 0e: Initial (relative) SS value */ 2526 WORD e_sp; /* 10: Initial SP value */ 2527 WORD e_csum; /* 12: Checksum */ 2528 WORD e_ip; /* 14: Initial IP value */ 2529 WORD e_cs; /* 16: Initial (relative) CS value */ 2530 WORD e_lfarlc; /* 18: File address of relocation table */ 2531 WORD e_ovno; /* 1a: Overlay number */ 2532 WORD e_res[4]; /* 1c: Reserved words */ 2533 WORD e_oemid; /* 24: OEM identifier (for e_oeminfo) */ 2534 WORD e_oeminfo; /* 26: OEM information; e_oemid specific */ 2535 WORD e_res2[10]; /* 28: Reserved words */ 2536 DWORD e_lfanew; /* 3c: Offset to extended header */ 2537 } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER; 2538 #include <poppack.h> 2539 2540 #define IMAGE_DOS_SIGNATURE 0x5A4D /* MZ */Also jede EXE-Datei beginnt mit dem IMAGE_DOS_HEADER.
e_magic muss IMAGE_DOS_SIGNATURE sein, damit es eine gültige (DOS-)Exe ist.Dann steht an (Dateibeginn + e_lfanew Bytes) die Position der IMAGE_NT_HEADERS (link)
Signature muss hier IMAGE_NT_SIGNATURE sein.
Jetzt siehst Du den FileHeader und kannst ihn Deinen Wünschen entsprechend bearbeiten.Der Grund, warum einige hier etwas schroff reagieren: Das hättest Du auch selber (mit Google usw) rausfinden können.