Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   AV beim schreiben in DLL-Adressraum (https://www.delphipraxis.net/72625-av-beim-schreiben-dll-adressraum.html)

SirThornberry 4. Jul 2006 09:05


AV beim schreiben in DLL-Adressraum
 
Hallo,

ich lade mit LoadLibrary eine DLL, hole mir mit GetProcAddr die Adresse einer Funktion und will dort was hinschreiben. Leider kommt dabei eine AV. Ich dachte innerhalb meines Prozesses darf ich den Speicher umschreiben wie ich will, oder lieg ich da falsch?

Hier mein TestQuelltext
Delphi-Quellcode:
var lLib: Cardinal;
    lAddr: PChar;
begin
  lLib := LoadLibrary('user32.dll');
  if lLib <> 0 then
  begin
    lAddr := GetProcAddress(lLib, 'MessageBoxA');
    lAddr[0] := '5';
Das die '5' unsinnig ist weiß ich, mir ging es erstmal darum überhaupt dort hin schreiben zu können.

Warum geht das nicht? :cry:

Bernhard Geyer 4. Jul 2006 09:08

Re: AV beim schreiben in DLL-Adressraum
 
Die Prozessadresse ist in einem als Ausführbar gekennzeichneten Bereich auf den standardmäßig keine Schreibrechge vorhanden sind. Um dorthin zuschreiben (z.B. Hooking) mußt du die Rechte der Speicherpage ändern. In der Jedi gibt es Klassen (TJclPeMapImgHooks) die sowas können. Diesen Code kannst Du dir mal anschauen.

SirThornberry 4. Jul 2006 09:09

Re: AV beim schreiben in DLL-Adressraum
 
thx, bin bisher davon ausgegangen das ich dort schreibrechte hab weil innerhalb des eigenen Exe-Codes das auch ging (aber da wird ja auch nix mit LoadLibrary geladen)

chaosben 4. Jul 2006 09:16

Re: AV beim schreiben in DLL-Adressraum
 
Und falls du was gegen die Jedis hast (es soll solche Menschen geben), kannst du auch MSDN-Library durchsuchenVirtualProtect nutzen (Erst mit PAGE_WRITECOPY und dann mit PAGE_EXECUTE)

Bernhard Geyer 4. Jul 2006 09:20

Re: AV beim schreiben in DLL-Adressraum
 
Die Klasse TJclPeMapImgHooks nutzt intern diese WinAPI-Funktion. Was will sie auch anders machen?

SirThornberry 4. Jul 2006 09:34

Re: AV beim schreiben in DLL-Adressraum
 
Zitat:

Zitat von chaosben
Und falls du was gegen die Jedis hast (es soll solche Menschen geben), kannst du auch MSDN-Library durchsuchenVirtualProtect nutzen (Erst mit PAGE_WRITECOPY und dann mit PAGE_EXECUTE)

Ich hab jetzt meinen eigenen Prozess mit OpenProcess geöffnet. Ich kam nicht drauf wie die andere Funktion heißt.

chaosben 4. Jul 2006 11:40

Re: AV beim schreiben in DLL-Adressraum
 
Zitat:

Zitat von Bernhard Geyer
Die Klasse TJclPeMapImgHooks nutzt intern diese WinAPI-Funktion. Was will sie auch anders machen?

Ja, das war mir schon klar. Mir sind nur leider schon Programmierer über den Weg gelaufem, die auf keinen Fall eine Jedi-Unit einbinden wollten (wenngleich ich SirThornberry nicht für einen solchen halte). Für diesen Fall war mein Kommentar gedacht. :)

SirThornberry 4. Jul 2006 11:51

Re: AV beim schreiben in DLL-Adressraum
 
@chaosben: Deine Bedenken waren richtig. Ich halte es für übertrieben für eine solch kleine Sache eine ganze Unit einzubinden bzw. ein so riesiges Package zu installieren (zumal es nur spielerei ist und ich es nicht für was wichtiges benötige).


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:19 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