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
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
356 Beiträge
 
Delphi 11 Alexandria
 
#1

Pointer oder Protected Memory ?

  Alt 27. Aug 2024, 18:12
Hallo,
gibt es sowas wie Protected Memory in Delphi und FPC ?
Also so, das ich mir eine globale Variable anlege, die sagen wir mal 32 Bit groß ist - egal welcher Art, weil, Daten sind im Computer ja alle samt bestehend nur aus 0 und 1, okay, jedenfalls bräuchte ich eine "nicht" platformspezifiesche Programmierlogik, bei der ich die Daten eines Datentyps; sagen wir mal BYTE in den protected Memory space kopiere/speichere, und dann an eine DLL Funktion übergeben kann, um dann den Datentyp (also den Wert aus der globalen Variable) weiterverarbeiten kann.
Dazu wird dann natürlich die passende Funktion geliefert - also die Funktion aus der DLL bekommt den Pointer auf die globale Variable (die solange gültig ist, wie das Programm läuft), so dass ich dann genau weiß, welcher Pointer wie abgearbeitet werden muss ?

Gibt es da was fertiges ?
Gerne auch kurzes Beispiel, fürs nachbauen...
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat
Rollo62

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

AW: Pointer oder Protected Memory ?

  Alt 27. Aug 2024, 18: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
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Pointer oder Protected Memory ?

  Alt 28. Aug 2024, 07:45
Ich verstehe das "protected" aus der Frage noch nicht. Was genau soll das in dem Kontext bedeuten?
  Mit Zitat antworten Zitat
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
252 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Pointer oder Protected Memory ?

  Alt 28. Aug 2024, 07:58
Meine Meinung nach kommen DLLs im 'Delphi Kosmos' eigentlich nicht vor, man muss halt manchmal auf welche zugreifen weil es nicht anders geht.
Aber eine Anwendung aus Delphi Programm + 'Delphi' DLL macht für mich eigentlich keinen Sinn.
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#5

AW: Pointer oder Protected Memory ?

  Alt 28. Aug 2024, 08:14
Nicht plattformspezifisch und DLL passt irgendwie auch nicht zusammen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.116 Beiträge
 
Delphi 12 Athens
 
#6

AW: Pointer oder Protected Memory ?

  Alt 28. Aug 2024, 08:22
Ich vermute, es geht auch um eine Kopplung von Delphi mit externen C++ DLLs in irgendeiner Form, richtig?
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
356 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Pointer oder Protected Memory ?

  Alt 28. Aug 2024, 08:25
auch andere Platformen unterstützen DLL Fähigkeiten (was nicht unbedingt durch den Dateinamen begrenzt sein muss).
mit Delphi kann man auch DLL oder .so Dateien erstellen.
die vorliegende DLL ist mit C++ Compiler erstellt worden (also auch nicht unbedingt begrenzt auf das Produktivsystem/Compiler-Model).
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.623 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Pointer oder Protected Memory ?

  Alt 28. Aug 2024, 08:50
Meine Meinung nach kommen DLLs im 'Delphi Kosmos' eigentlich nicht vor, man muss halt manchmal auf welche zugreifen weil es nicht anders geht.
Aber eine Anwendung aus Delphi Programm + 'Delphi' DLL macht für mich eigentlich keinen Sinn.
Sagen wir mal sie kommen in Deinem Delphi Kosmos nicht vor.
Es gibt durchaus Anwendungsfälle für DLLs in Delphi, sei es, um bestimmte Funktionalität für Programme aus anderen Programmiersprachen zur Verfügung zu stellen oder auch nur um sie zu kapseln, ohne dabei auf Packages zurückgreifen zu müssen (was ja leider immer bedeutet, dass man die RTL- und VCL-Packages ebenfalls verwenden muss).

Aber zugegebenermaßen habe ich auch schon lange keine DLLs mehr geschrieben, weil wir intern nur Delphi als Entwicklungstool einsetzen. Bei meinem früheren Arbeitgeber war das noch anders. Da hatten wir zwei in vielen Programmen genutzte DLLs:

1. Internationalisierung via gnugettext (mittels einer DLL, die dxgettext verwendete)
2. Anmeldung und Rechteverwaltung

Beides hätte man natürlich auch in allen 3 verwendeten Programmiersprachen (Visual Basic (pre dotNET), Visual C++ und Delphi) parallel entwickeln können, aber warum sollte man?

Es gab noch Pläne für weitere DLLs, aber das war dann, nachdem ich schon neue Stelle hatte.

Heutzutage kann man evtl. auch auf DLLs zurückgreifen, wenn man von Delphi weg zu einer "moderneren", "weiter verbreiteten", "anderer Grund des Tages" Programmiersprache wechseln will, indem man Funktionalität in DLLs kapselt und diese nach und nach portiert. Ob das der beste Weg ist, ist allerdings zweifelhaft.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.623 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Pointer oder Protected Memory ?

  Alt 28. Aug 2024, 08:54
Hallo,
gibt es sowas wie Protected Memory in Delphi und FPC ?
Also so, das ich mir eine globale Variable anlege, die sagen wir mal 32 Bit groß ist - egal welcher Art, weil, Daten sind im Computer ja alle samt bestehend nur aus 0 und 1, okay, jedenfalls bräuchte ich eine "nicht" platformspezifiesche Programmierlogik, bei der ich die Daten eines Datentyps; sagen wir mal BYTE in den protected Memory space kopiere/speichere, und dann an eine DLL Funktion übergeben kann, um dann den Datentyp (also den Wert aus der globalen Variable) weiterverarbeiten kann.
Dazu wird dann natürlich die passende Funktion geliefert - also die Funktion aus der DLL bekommt den Pointer auf die globale Variable (die solange gültig ist, wie das Programm läuft), so dass ich dann genau weiß, welcher Pointer wie abgearbeitet werden muss ?
Das hört an als ginge es um eine Art von mehreren Programmen gemeinsam genutzten Speicher. Unter Windows könnte man das mit einem Memory-mapped File lösen. Aber plattformunabhängig wäre mir da nichts bekannt.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

AW: Pointer oder Protected Memory ?

  Alt 28. Aug 2024, 09:29
Aber plattformunabhängig wäre mir da nichts bekannt.
(File)Streams, Sockets, TCP/IP, IPC, MMF (Named oder per Handle), GlobalAlloc, VirtualAlloc (prozessübergreifend wenn nur mit PhysicalPages, aber sowas macht man nicht!!!!), ...
$2B or not $2B

Geändert von himitsu (28. Aug 2024 um 09:37 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz