Guten Tag...
Für all diejenigen die's interessiert... Es gibt eine Möglichkeit das man auch über CreateToolHelp... an die Basis Adresse der Main Executable rankommt.
Folgendes beschreibt die Möglichkeit wie man die Basis eines geladenen Moduls bekommt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| Var ProcID: Integer; FindDLLBase: Boolean; SnapMod: THandle; ModuleEntry: TModuleEntry32; DLLBaseAddy: PByte; Begin SnapMod:= CreateToolhelp32Snapshot(TH32CS_Snapmodule, ProcID); ModuleEntry.dwSize := Sizeof(ModuleEntry); FindDLLBase:= Module32First (SnapMod, ModuleEntry); while FindDLLBase do begin if (CompareText(Moduleentry.szModule, 'Game.dll')=0) then DLLBaseAddy:= ModuleEntry.modBaseAddr; FindDLLBase:= Module32Next(SnapMod, ModuleEntry); end; CloseHandle(SnapMod); end; |
Bei einer EXE Datei funktioniert das mit obigen Beispiel nur in abgewandelter Form. Nämlich so...
Delphi-Quelltext
1:
| if CompareText(Moduleentry.szModule, 'Game.exe')=0 then |
Nun werden einige sagen - Logisch, da steht ja jetz auch 'Game.exe' anstatt 'Game.dll'. Aber worauf es hierbei ankommt ist der Unterschied zum obigen Sourcecode das hier die 2 Klammern fehlen. Als da wären zum Einen die Klammer Auf vor "CompareText" und zum Anderen die Klammer Zu nach dem "=0". Zum anderen könnte man diese Zeile auch noch mit "lstrcmp/lstrcmpi" realisieren, würde ja genau so gehen.
Was mich jetzt aber mal interessieren würde ist, warum das so ist? Oder vielmehr die Frage - Welche Bedeutung/Funktion haben diese beiden Klammern?
MFG
Don Krawallo