AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Zugriff von DLL auf Speicherbereich
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff von DLL auf Speicherbereich

Ein Thema von Shaman · begonnen am 13. Nov 2004 · letzter Beitrag vom 14. Nov 2004
Antwort Antwort
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#1

Zugriff von DLL auf Speicherbereich

  Alt 13. Nov 2004, 18:53
Hallo zusammen

Wie kann ich von einer DLL aus am einfachsten auf einen Speicherbereich lesend zugreifen, welcher in dem Programm liegt, das sie einbindet? Wichtig ist, dass die Daten von der DLL nicht geändert werden können.

Gruss
Shaman
Daniel Pauli
Looking for answers from the great beyond
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#2

Re: Zugriff von DLL auf Speicherbereich

  Alt 13. Nov 2004, 23:46
Da Execute eigentlich Read impliziert, hast du bereits alle Rechte. Du brauchst also nur eine gültige Adresse. Unter Windows bekommst du die Basisadresse der Anwendung mit GetModuleHandle()
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#3

Re: Zugriff von DLL auf Speicherbereich

  Alt 14. Nov 2004, 08:59
Zitat:
Wie kann ich von einer DLL aus am einfachsten auf einen Speicherbereich lesend zugreifen, welcher in dem Programm liegt, das sie einbindet? Wichtig ist, dass die Daten von der DLL nicht geändert werden können.
Was genau möchtest du denn machen?
Vielleicht kannst du dein Problem auch mit Hier im Forum suchenCreateFileMapping lösen?
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Zugriff von DLL auf Speicherbereich

  Alt 14. Nov 2004, 12:43
Also, ich kam auf die Idee, so à la Pascal Robots ein Snake-Spiel zu machen, wobei die Schlangen nicht direkt gesteuert werden, sondern eine KI besitzen, welche man in einer DLL programmiert. Das Spiel ruft dann Funktionen aus der KI-DLL auf, welche z.B. den nächsten Zug festlegen. Jetzt müssen den DLLs natürlich auch Informationen über das Spielfeld bereitgestellt werden, doch sie dürfen diese nicht verändern können. Wie lässt sich das am besten realisieren?

Gruss
Shaman
Daniel Pauli
Looking for answers from the great beyond
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#5

Re: Zugriff von DLL auf Speicherbereich

  Alt 14. Nov 2004, 14:00
Zitat von Shaman:
Also, ich kam auf die Idee, so à la Pascal Robots ein Snake-Spiel zu machen, wobei die Schlangen nicht direkt gesteuert werden, sondern eine KI besitzen, welche man in einer DLL programmiert. Das Spiel ruft dann Funktionen aus der KI-DLL auf, welche z.B. den nächsten Zug festlegen. Jetzt müssen den DLLs natürlich auch Informationen über das Spielfeld bereitgestellt werden, doch sie dürfen diese nicht verändern können. Wie lässt sich das am besten realisieren?
Ehrliche Antwort? Garnicht!

Du kannst zwar zB mit VirtualAlloc(), VirtualFree() und VirtualProtect() einfach mal den Speicherbereich schützen - aber leider ist ja die DLL im Prozeß und hat exakt die gleichen Rechte wie das Prozeßmodul selbst. Also kann sie alles machen - inklusive VirtualProtect() aufrufen um den Schutz zu unterminieren.

Eine andere, wenn auch langsamere, Methode der Übergabe wäre wohl das Kopieren des gesamten Feldes in den von der DLL bereitgestellen Speicherbereich.

Die (IMO) beste Methode jedoch könnte über MMFs (siehe Vorredner) möglich sein, da man deren Zugriff auch limitieren kann. Also angenommen du hast eine MMF (bzw deren Handle) und gibst der DLL nur einen View-Pointer zur MMF, der bereits schreibgeschützt ist (also der View auf die MMF ist schreibgeschützt), dann hast du keine Probleme mehr. Umgehen kann man das sicherlich auch, aber nicht ohne größere Kopfstände.
MMFs sind nicht direkt im Prozeßspeicher in dem Sinne, sondern werden nur in den geteilten Raum aller Benutzerprozesse gemappt. Das erklärt auch den Unterschied.

*Innerhalb* des Prozesses wie du es vorher ansprachst ist es aussichtslos, da die DLL alle Maßnahmen von dir unterminieren kann. Allerdings sollte normalerweise zwischen dem "Pluginschreiber" und dem Programmautor ein Konsens stattfinden.
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:56 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