![]() |
Re: Speicherbereich einer Anwendung ermitteln
Hy danke für den Code.
lg Bundy |
Re: Speicherbereich einer Anwendung ermitteln
Zitat:
|
Re: Speicherbereich einer Anwendung ermitteln
Zitat:
Ich bin nicht von physikalischem Speicher ausgegangen, sondern eher davon, dass jedes Programm sich für das One-And-Only hält, also mit den anderen nichts zu tun hat Snuffi |
Re: Speicherbereich einer Anwendung ermitteln
Zitat:
Das Handles von Files/Processen nichts mit einer Addresse zu tun haben ist klar. Ich empfehle dir mal Windows95 Secrets von Matt Petriek, da erfährt man viel über den Aufbau von Windows. |
Re: Speicherbereich einer Anwendung ermitteln
Zitat:
Mir ist sche**egal, wie etwas implementiert ist und wie es in der Realität aussieht. Es ist nicht in der API festgelegt, und das ist, was zählt. Microsoft kann in seiner nächsten Version kommen und die gesamte Debug-API umschreiben und die Handles zu Einträgen in irgendwelchen internen Lookup-Tables machen, und schon guckst du in die Röhre, weil dein Handle dir plötzlich nur noch sagt "Eintrag 42" und nicht mehr "Adresse $7411". Laut API ist das erlaubt, weil ein Handle kein Pointer auf die Basisadresse ist. Was aber nicht geht, ist, daß Microsoft in seiner nächsten Version plötzlich ganz andere Zahlen über die TollHelp-API zurückliefert, ganz einfach weil die API so definiert ist. Klar können sie die API ändern, aber davon kriegt man auch etwas mit. Die Sache mit den Handles merkt man entweder, indem man's ausprobiert, oder gar nicht. Es ist ganz einfach eine Frage, ob ich Code schreiben will, der in irgendeiner Art und Weise definiertes Verhalten zeigt, oder ob er nur zufällig funktioniert und morgen bereits aufhören könnte, zu funktionieren. |
Re: Speicherbereich einer Anwendung ermitteln
Hey there
Delphi-Quellcode:
Grussuses tlhelp32; function GetFirstModuleInfo(const ProcessId: Cardinal; out uModule: MODULEENTRY32): Boolean; var hSnapShot: Cardinal; begin Result:= False; hSnapShot:= CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessId); if hSnapShot <> 0 then begin uModule.dwSize:= SizeOf(uModule); Result:= Module32First(hSnapShot, uModule); CloseHandle(hSnapShot); end; end; // uModule.modBaseAddr enthält die Basisadresse Shaman |
Re: Speicherbereich einer Anwendung ermitteln
Funktioniert nicht unter WinNT.
Leifert unter 9x nicht die Executable des Hauptprogramms.
Code:
Wenn NT nutze Alternativfunktion anonsten nutze tlhelp32
Code:
tlhelp32 ist
nutze GetModuleHandle, nutze eventl. unter Windows32Bit Betriebsystem was irgendwann mal nach Vista erscheint eine Alternativfunktion (evntl. tlhelp32)
1) langsamer 2) funktioniert auf NT nicht 3) umständlich Zumal GMH auch nahmhafte Firmen/Leute benutzen. Genauso wahscheinlich wie die änderung der Handles ist die Entferung von den tlhelp funktionen, da Microdoft verstärkt Callback funktionen nutzt (EnumProcesses, EnumProcessModules) (Wegen Abwärtskompatibilität wird höchstwahrscheinlich weeder Base = Handle noch tlhelp32 verändert) Auch hier müsste man dann für 9x/Nt Unterscheidungen machen. Nun kann ja jeder einzelne sich darüber ein Bild machen, welche Methode er nutzen will. |
Re: Speicherbereich einer Anwendung ermitteln
Also mit VirtualQuery kann man ja auch die Startposition eines Speicherblocks erfahren, also wäre es doch damit ebenfalls möglich, da die Dateien (EXE/DLL...) als eigenständige Speicherblöcke in dem Arbeitzsspeicher gemappt werden?
Delphi-Quellcode:
Var MBI: TMemoryBasicInformation;
P := irgendwas innerhalb des Moduls (z.B. der Pointer zu 'ner Funktion/Prozedur); VirtualQuery(P, MBI, SizeOf(MBI)); BaseAddress := MBI.BaseAddress |
Re: Speicherbereich einer Anwendung ermitteln
sind trainer überhaupt legal?
:|für welches spiel ist es denn? |
Re: Speicherbereich einer Anwendung ermitteln
@himitsu
Die Idee daran ist nicht schlecht (wenn auch ein bisschen alt ;) ). Richtig müsste es aber lauten:
Delphi-Quellcode:
Da (so viel ich weiß) MBI.BaseAddress die Base von der Section zurückliefert.
MBI.AllocationBase
lpBuffer.AllocationBase liefert einen Pointer zurück, mit dem man (meiner MEinugn nach) problemlos in ein DWOrd umwandeln kann um dann z.b. mit GetProcAddress / GetModuleFileName etc. weitere Daten zu ermitteln. Um aber die Base für einen Trainer umzurechnen, reicht es aber allemal. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz