Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   ReadProcessMemory -> Problem (https://www.delphipraxis.net/155265-readprocessmemory-problem.html)

Sir Rufo 15. Okt 2010 14:01

AW: ReadProcessMemory -> Problem
 
Es kommt eine Exception, aber anders als gedacht ;)

Die Procedere gibt ein PChar zurück und genau der Speicher auf den der Rückgabewert zeigt wird noch in der Procedere selber freigegeben
Delphi-Quellcode:
Result := P;
{...}
FreeMem( P );
Das muss doch knallen

himitsu 15. Okt 2010 14:03

AW: ReadProcessMemory -> Problem
 
Zitat:

Zitat von Luckie (Beitrag 1055936)
Seit wann werfen API-Funktionen Exceptions?

Das war nicht diese API, sondern eine Andere ... die hinter dem WriteLn, welche auf falschen Speicher zugreifen wollte.
[edit] Joar, und dann noch das FreeMem.

Luckie 15. Okt 2010 17:22

AW: ReadProcessMemory -> Problem
 
Zitat:

Zitat von Luckie (Beitrag 1055936)
Seit wann werfen API-Funktionen Exceptions?

Weil der API-Aufruf zu eiber Access Violation fühert vermute ich mal.

Sir Rufo 15. Okt 2010 17:39

AW: ReadProcessMemory -> Problem
 
Zitat:

Zitat von Luckie (Beitrag 1055970)
Zitat:

Zitat von Luckie (Beitrag 1055936)
Seit wann werfen API-Funktionen Exceptions?

Weil der API-Aufruf zu eiber Access Violation fühert vermute ich mal.

NEIN

Delphi-Quellcode:
Function ReadMemory: PChar;
begin
try
 
  GetMem(p, SizeOf(P));
 
  ReadProcessMemory(WindowHandle, Ptr($01324480), @P, SizeOf(P), write);

  // so result zeigt jetzt auf die gleiche Adresse wie P

  Result := P;

finally

  // Jetzt wird der Speicher an der Adresse P freigegeben
  // Wir erinnern uns, diese Adresse ist auch in Result gespeichert
  // Was können wir an dieser Adresse jetzt noch erwarten?
  // Richtig: Datenmüll

  FreeMem(P);
  CloseHandle(WindowHandle);
end;

begin
  OpenMemory;
  Writeln(ReadMemory); //--> geht nicht, logisch, weil unter Rückgabeadresse nix ist
  Readln;
end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 Uhr.
Seite 2 von 2     12   

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