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 ReadProcessMemory ERROR 299 (https://www.delphipraxis.net/120170-readprocessmemory-error-299-a.html)

sk0r 6. Sep 2008 16:00


ReadProcessMemory ERROR 299
 
Hi,

ich möchte mit ReadProcessMemory einen Speicherbereich in
einen Buffer einlesen. Doch ich bekomme die Fehlernummer
299 von GetLastError. Das Prozesshandle ist gültig.
Ich wollte halt bei ImageNtHeader.OptionalHeader.BaseOfCode
bis zum Ende (ImageNtHeader.OptionalHeader.SizeOfCode) lesen.
Aber ich bekomme da immer diese Fehlernummer. dwBytesRead ist immer 0.

Danke für Hilfe im Vorraus.

Mfg: sk0r

Neutral General 6. Sep 2008 16:08

Re: ReadProcessMemory ERROR 299
 
Hi,

Zeig mal deinen Code. Wie erhälst du das Prozesshandle?

sk0r 6. Sep 2008 16:24

Re: ReadProcessMemory ERROR 299
 
Delphi-Quellcode:
hProc := OpenProcess(PROCESS_VM_READ or PROCESS_QUERY_INFORMATION, false, hProcId);
[...]
ReadProcessMemory(hProc, tm.modBaseAddr, @gDosHeader2, sizeof(TImageDosHeader), dwBytesRead);
ReadProcessMemory(hProc, PImageNtHeaders(Cardinal(tm.modBaseAddr) + gDosHeader2._lfanew), @gNtHeaders2, sizeof(TImageNtHeaders), dwBytesRead);
Und dann durchlaufe ich den Speicher von BaseOfCode nach BaseOfCode + SizeOfCode.

Win32.API 6. Sep 2008 16:39

Re: ReadProcessMemory ERROR 299
 
Und welcher RPM-Aufruf schlaegt fehl? :glaskugel:

sk0r 6. Sep 2008 16:56

Re: ReadProcessMemory ERROR 299
 
Delphi-Quellcode:
ReadProcessMemory(hProc, tm.modBaseAddr, @gDosHeader2, sizeof(TImageDosHeader), dwBytesRead);
ReadProcessMemory(hProc, PImageNtHeaders(Cardinal(tm.modBaseAddr) + gDosHeader2._lfanew), @gNtHeaders2, sizeof(TImageNtHeaders), dwBytesRead);

var mBuf: array[0..1024-1] of Byte;

//Schlägt fehl:
ReadProcessMemory(hProc, Pointer(gNtHeaders2.OptionalHeader.BaseOfCode), @mBuf, sizeof(mBuf), dwBytesRead);

brechi 6. Sep 2008 17:52

Re: ReadProcessMemory ERROR 299
 
hast du mal geschau was baseofcode ist? kann sein, dass da müll drin steht (auch wenn die DLL an andere adresse geladen wurde) ggf musst du noch die dllbase draufaddieren

sk0r 6. Sep 2008 19:12

Re: ReadProcessMemory ERROR 299
 
Wenn ich die addiere, dann kommt Zugriff verweigert. :/

OldGrumpy 6. Sep 2008 20:07

Re: ReadProcessMemory ERROR 299
 
Fehler 299 bedeutet dass die Lese- oder Schreibanforderung nur zum Teil erfüllt werden konnte. Sprich Du liest über das Ende des tatsächlich gemappten Speichers hinaus. Ermittle nach dem Holen der Base erst, bis wohin der Speicher überhaupt das COMMIT-Flag hat.

sk0r 27. Sep 2008 15:34

Re: ReadProcessMemory ERROR 299
 
Zitat:

Zitat von OldGrumpy
Fehler 299 bedeutet dass die Lese- oder Schreibanforderung nur zum Teil erfüllt werden konnte. Sprich Du liest über das Ende des tatsächlich gemappten Speichers hinaus. Ermittle nach dem Holen der Base erst, bis wohin der Speicher überhaupt das COMMIT-Flag hat.

Würde dwBytesRead dann nicht den Wert enthalten, der noch gelesen wurde? Ich ich meine, es schlägt ja direkt der erste Aufruf fehl... Undwie überprüfe ich, bis wohin er das COMMIT Flag hat?

OldGrumpy 27. Sep 2008 18:17

Re: ReadProcessMemory ERROR 299
 
Setze bitte mal einen Breakpoint auf den fehlschlagenden ReadProcessMemory-Aufruf und sag mir welchen Wert Dein gNtHeaders2.OptionalHeader.BaseOfCode hat.


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