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/)
-   -   Delphi WriteProcessMemory schreibt nicht :( (https://www.delphipraxis.net/62631-writeprocessmemory-schreibt-nicht.html)

T3rm1n4T0r 7. Feb 2006 14:36


WriteProcessMemory schreibt nicht :(
 
Hi,
ich verwende ich meinem aktuellen Programm WriteProcessMemory. Nur leider funktioniert dies nicht. Es wird einfach nichts geschrieben. Die Anzahl der geschriebenen Bytes ist 0 und auch der Wert (wenn ich ihn danach mit ReadProcessMemory lese) derselbe.
Hier mal mein Source

Vielleicht weiß ja jemand was da los ist.

Gruß T3rm1

Basilikum 7. Feb 2006 15:03

Re: WriteProcessMemory schreibt nicht :(
 
vermutlich ist der Memory-Bereich Read-Only...
siehe MSDN-Library durchsuchenVirtualProtectEx

T3rm1n4T0r 7. Feb 2006 15:26

Re: WriteProcessMemory schreibt nicht :(
 
Könnte sein. Wie kann ich denn die Rechte ändern?
Hab das so probiert:
Delphi-Quellcode:
tmp := VirtualProtectEx(pi.hProcess,Ptr(baseaddress),1,PAGE_EXECUTE_READWRITE,ptr(oldaccess));
Aber die Funktion schlägt immer fehl. Oldaccess ist dabei ein cardinal.

Edit: Hab jetzt mal versucht bei irgendeinem Programm, dass ich mal erstellt habe im Speicher zu schreiben und auch da funktioniert es nicht.
Es muss also an irgendwas anderem liegen :/

Basilikum 7. Feb 2006 15:53

Re: WriteProcessMemory schreibt nicht :(
 
vermutlich liegt es am Ptr vor baseaddress... das API erwartet dort die Adresse in Form eines Pointers, nicht einen Pointer auf die Adresse..... versuchs mal mit Pointer(baseaddress).... dasselbe übrigens auch bei den Aufrufen von WriteProcessMemory.....

T3rm1n4T0r 7. Feb 2006 16:00

Re: WriteProcessMemory schreibt nicht :(
 
oO
ptr = pointer
Außerdem kann ich damit genau den Wert auslesen der da steht. Nur nicht schreiben.

Basilikum 7. Feb 2006 16:05

Re: WriteProcessMemory schreibt nicht :(
 
Zitat:

Zitat von T3rm1n4T0r
oO
ptr = pointer
Außerdem kann ich damit genau den Wert auslesen der da steht. Nur nicht schreiben.

oke... möglich... ich hatte hier noch die Function Ptr() aus Turbo Pascal im Kopf, die die Adresse der Variable zurückgegeben hat (was in diesem Fall ja nicht erwünscht wäre)...

führe mal nach dem WriteProcessMemory ein RaiseLastOSError() aus... welcher Fehler tritt auf ?

brechi 7. Feb 2006 16:09

Re: WriteProcessMemory schreibt nicht :(
 
Der Fehler ist, dass du ein

@origByte brauchst und kein ptr(origByte)

T3rm1n4T0r 7. Feb 2006 16:37

Re: WriteProcessMemory schreibt nicht :(
 
Ok, geht, danke!

jbg 7. Feb 2006 18:43

Re: WriteProcessMemory schreibt nicht :(
 
Zitat:

Zitat von Basilikum
ich hatte hier noch die Function Ptr() aus Turbo Pascal im Kopf, die die Adresse der Variable zurückgegeben hat

Nur liefert Ptr nicht die Adresse der Variable in TurboPascal, sondern konstruiert einen Zeiger aus Segment und Offset: Ptr(Seg, Offset). Die Addr(variable/proc) Funktion, die es auch noch unter Delphi gibt, liefer genau wie @variable/proc die Adresse.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:57 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 by Thomas Breitkreuz