![]() |
Zugriff von DLL auf Speicherbereich
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 |
Re: Zugriff von DLL auf Speicherbereich
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()
|
Re: Zugriff von DLL auf Speicherbereich
Zitat:
Vielleicht kannst du dein Problem auch mit ![]() |
Re: Zugriff von DLL auf Speicherbereich
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 |
Re: Zugriff von DLL auf Speicherbereich
Zitat:
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06: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