AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ReadProcessMemory

Ein Thema von SleepyMaster · begonnen am 9. Dez 2003 · letzter Beitrag vom 10. Dez 2003
Antwort Antwort
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#1

ReadProcessMemory

  Alt 9. Dez 2003, 15:47
Was mach ich falsch???

Die erstellte exe (C:\AusRam.exe) ist immer 421.888 Bytes groß doch funzt ned! Warum???


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  data : array[1..1024] of char;
  Bytesread,a,z : DWORD;
  XPosition: int64;
  F: file;
begin
AssignFile(f, 'C:\AusRam.exe');
rewrite(f,1);
XPosition:=0;
Z:=GetCurrentProcess;
Bytesread:=1;
while Bytesread <> 0 do
  begin
  ReadProcessMemory(z,Pointer($400000+XPosition),@data[1],length(data),Bytesread);
  blockwrite(f,data[1],Bytesread);
  XPosition:=XPosition+Bytesread;
  end;
CloseFile(f);
end;
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#2

Re: ReadProcessMemory

  Alt 9. Dez 2003, 15:58
Die erzeugten Dateien sind immer so groß, wie sie Speicherplatz auf dem Datenträger verbrauche!

Edit: Sorry! Aber nur wenn der Buffer auch 1024Bytes groß ist! Logisch!

Nur warum läuft die erstellte exe nicht???
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#3

Re: ReadProcessMemory

  Alt 9. Dez 2003, 17:24
Warum sollte es denn laufen?
Was im RAM steht und was im EXE File steht ist nicht gleich.
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#4

Re: ReadProcessMemory

  Alt 10. Dez 2003, 14:31
Wenn man ein Programm startet wird es vollständig in den Arbeitsspeicher geladen, und von dort aus "gestartet" (glaub ich zumindestens mal).
Und immerhin ist der Header der Datei, die ich auf die Festplatte kopiert habe richtig. Auch der restlicher Inhalt stimmt mit dem Originalen FAST überein. Nur zwichendurch hab ich ganze Blöcke in denen nichts drinsteht.

Woran liegt das??? Was mach ich falsch???
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#5

Re: ReadProcessMemory

  Alt 10. Dez 2003, 15:26
Deine Vorstellung eines Programm-Laders ist zu primitiv.
Ein Programm muss keineswegs vollstaendig geladen sein.
Es kann eine Relozierung von Adressen vorgenommen werden.
Das Datensegment mit den nicht initialisierten globalen Variablen
ist im File ueberhaupt nicht vorhanden. Es wird nur im Speicher angelegt.
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#6

Re: ReadProcessMemory

  Alt 10. Dez 2003, 16:08
Das erste ist mir auch klar!

Zum zweiten: Heißt das, dass die exe erst dann funktionieren würde, wenn wirklich ALLE Variablen initialisiert werden würden??? Und werden die Variabeln nicht in einem anderen Teil des Arbeitsspeichers untergebracht???
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#7

Re: ReadProcessMemory

  Alt 10. Dez 2003, 17:15
Nicht initialisierte globale Variablen liegen in einem eigenen Segment (traditionell .BSS genannt).
Im EXE ist das Segment leer. Im Speicher wird es angelegt und mit 0 gefuellt. Daher haben alle globalen Variablen in Delphi ihre Vorbelegung.
Initialisierte globale Variablen liegen in einem anderen Segment (.DATA genannt).
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#8

Re: ReadProcessMemory

  Alt 10. Dez 2003, 18:18
OK! Vielen Dank für die Hilfe!!!

Gruß SleepyMaster
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:45 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