Seite 1 von 1

Speicherbereiche verwalten

Verfasst: 30.04.2006 00:31
von MVXA
Abend,
dieser "kleine" Source hier soll einem das Verwalten von Speicher-
bereichen erleichtern. Geschrieben wurde er für PB 4.0. Möchte an
dieser Stelle auch noch mal Deeem für seine Hilfe danken. Ohne ihn
könnte ich den Source hier jetzt nicht posten :). Und natürlich TS-Soft
und Winduff für ihre Geduld :P.

Vorgehensweise:
Inspiriert von Deeems Source, um Threads im Suspend Mode starten
zu lassen, habe ich auch hier die Befehle von PureBasic leicht im
Speicher modifziert. Aufgrund dieser Vorgehensweise ist dieser Source
auch soweit an PB4 gebunden.

Die Funktion ersetzt im Speicher die Aufrufe zu HeapAlloc und HeapFree
durch eigene Routinen: AllocFake und FreeFake.

Installation:
Die Installation dieses Sources in das eigene Projekt ist ganz einfach.
Ihr erstellt einfach eine neue Datei in die ihr den Source rein kopiert.
Danach lasst ihr die Datei per IncludeFile mit kompilieren und fertig
ist es. Am Start des hauptprogramms sollte aber ein

Code: Alles auswählen

If HookAllocMem()
...
EndIf
Stehen. Damit wird der Hook auf die Funktionen ausgeführt.

Befehle:
  1. UsedMemory()
    • Rückgabe: Long
    • Beschreibung:
      Diese Funktion gibt den aktuell genutzten Speicher wieder.
  2. ExamineMemorys()
    • Rückgabe: Boolean
    • Beschreibung:
      Diese Funktion startet das Abarbeiten aller Speicherbereiche, die bis
      zu diesem Zeitpunkt erstellt wurden.
  3. NextMemory()
    • Rückgabe: Boolean
    • Beschreibung:
      Diese Funktion sollte in Kombination mit der While Schleifen und nach
      einem erfolgreichen Aufruf des Befehls ExamineMemorys() aus-
      geführt werden. So lange es ein weiteres Element in der Liste gibt, wird
      sie #True zurückgeben.
  4. SelectMemory(*pMemory)
    • Rückgabe: Boolean
    • Beschreibung:
      Durch diese Funktion wird der Zeiger im Speicherpool auf das Element
      gelegt, was die Speicheradesse *pMemory beinhaltet.
  5. GetMemoryInfo(lMode.l)
    • Rückgabe: Long
    • Beschreibung:
      Mit Hilfe von diesem Befehl kann man entweder den Pointer oder die
      Größe des gerade ausgewählten Speicherbereichs ermitteln. Hier für
      wird der Parameter genutzt.
      • 1: Zeiger auf den Speicherbereich
      • 2: Größe des Speicherbereichs
  6. HookAllocMem()
    • Rückgabe: Boolean
    • Beschreibung:
      Führt die Hooks auf die 2 Befehle AllocateMemory() und FreeMemory()
      aus. Der Rückgabewert nennt den Erfolg.
Download:
http://source.eimex.de/mvxa/Beispiel.pb
http://source.eimex.de/mvxa/MemMngr.pb

Verfasst: 30.04.2006 00:39
von winduff
Sau geil! Habe dich tatsächlich unterschäzt... oder überschäzt?! :mrgreen:

Ne, aber hört sich super an freue mich auf den Source ;-)

Verfasst: 30.04.2006 13:00
von edel
Danke :allright:

Code: Alles auswählen

VirtualProtect_(*pAllocMem, $80, #PAGE_EXECUTE_READWRITE, @lOldProtection)
PokeL(*pAllocMem+23, @AllocFake()-(*pAllocMem+27))
VirtualProtect_(*pAllocMem, $80, lOldProtection, @lOldProtection)
Kann zwar mit deinem Funktionen nichts anfangen aber die 3 Zeilen waren
genau das was ich fuer ts-soft und mein Projekt brauche :-)

Verfasst: 20.06.2006 16:00
von Didelphodon
Echt geil!!!!

Könntest Du so nett sein und die Prozedur "HookAllocMem()" genauer (Schritt für Schritt) erläutern :roll:?

Danke u. LG Didel.