AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pointer oder Protected Memory ?

Ein Thema von paule32.jk · begonnen am 27. Aug 2024 · letzter Beitrag vom 28. Aug 2024
 
Rollo62

Registriert seit: 15. Mär 2007
4.174 Beiträge
 
Delphi 12 Athens
 
#2

AW: Pointer oder Protected Memory ?

  Alt 27. Aug 2024, 17:40
Sowas in der Art, ungetested:

Verwendung von VirtualAlloc/VirtualProtect (nur Windows)

VirtualAlloc: Kann verwendet werden, um einen Speicherblock im virtuellen Adressraum eines Prozesses zu reservieren. Dieser Speicher kann dann mit spezifischen Zugriffsrechten markiert werden.

VirtualProtect: Erlaubt es, die Zugriffsrechte auf einen Speicherbereich nachträglich zu ändern (z. B. von lesbar auf nicht lesbar).


Delphi-Quellcode:
var
  ProtectedMemory: Pointer;
  Size: DWORD;
begin
  Size := 32; // 32 Bytes
  ProtectedMemory := VirtualAlloc(nil, Size, MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE);
  if ProtectedMemory <> nil then
  begin
    // Daten in den geschützten Speicher schreiben
    PBYTE(ProtectedMemory)^ := 123; // Beispiel: einen Wert speichern
    
    // Zugriffsschutz ändern
    VirtualProtect(ProtectedMemory, Size, PAGE_READONLY, nil);

    // Pointer an eine DLL-Funktion übergeben
    // Beispiel: DLLFunction(ProtectedMemory);

    // Nach Nutzung: Speicher freigeben
    VirtualFree(ProtectedMemory, 0, MEM_RELEASE);
  end;
end;
Vorteile: Direkter Zugriff auf die Speicherverwaltung des Betriebssystems.
Nachteile: Plattformabhängig (nur für Windows), fehleranfällig, wenn nicht korrekt implementiert.


Eventuell geht es auch per TMemoryStream oder TBytes, ich bin jetzt nicht der DLL-Experte.

TMemoryStream: Kann zur Verwaltung von Speicherblöcken genutzt werden. Man kann den Stream lesen und schreiben,
aber den Pointer auf die Daten extrahieren, um ihn an eine DLL zu übergeben.

TBytes: Ein dynamisches Array von Bytes, das als Zwischenspeicher fungieren kann.

Delphi-Quellcode:
var
  MemoryBuffer: TBytes;
begin
  SetLength(MemoryBuffer, 32); // 32 Bytes

  // Daten in den Speicher schreiben
  MemoryBuffer[0] := 123; // Beispiel: einen Wert speichern

  // Pointer an eine DLL-Funktion übergeben
  // Beispiel: DLLFunction(@MemoryBuffer[0]);
end;
Vorteile: Plattformunabhängig, einfach zu implementieren.
Nachteile: Kein echter Schutz des Speichers (kein Schutz vor Schreibzugriffen).
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:12 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