Autor Beitrag
The-FoX
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 203

Win XP
D6 Pers
BeitragVerfasst: Sa 05.02.05 16:47 
Hallo,

Ich bin gerade dabei ein lustiges Programm zu erstellen :lol: (Dazu nachher mehr).

Also, ich möchte wissen, wie ich herausfinden kann, wo ein der Speicher eines Prozesses beginnt und wo er aufhört. Ich lese nämlich mit einer For-Schleife und ReadProcessmemory alle Werte aus und wandle diese dann in Farben um. Was dabei rauskommt ist der Hammer. Man kann anhand eines Bildes herausfinden, was das Programm gerade tut :lol: Ist ein unnötiges Programm, aber die Bilder die rauskommen machen einfach Spass. Das Problem ist jetzt, dass wenn ich bei $00000 beginne und bei $FFFFFF aufhöre sind 9 von 10 Werte nicht nicht "vergeben".

danke!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 05.02.05 19:01 
Nun ja, nicht jeder Prozess belegt auch seine 4 GB (2 GB) Adressraum, die er zugewiesen bekommt.
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Sa 05.02.05 19:20 
fang bei 0x00400000 an zu lesen
The-FoX Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 203

Win XP
D6 Pers
BeitragVerfasst: Sa 05.02.05 19:26 
habt dank!

Wenn ich bei 0x004000 anfange, funktioniert es!
Nur noch eine Frage: Wo hört der Speicher dann auf, bei $FFFFF?
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Sa 05.02.05 19:30 
The-FoX hat folgendes geschrieben:
Nur noch eine Frage: Wo hört der Speicher dann auf, bei $FFFFF?
Der benutzbare Speicher bei $7FFFFFFF, darüber kommt Verwaltung, MMFs etc.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
UC-Chewie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 531

WinXP
D5 Ent
BeitragVerfasst: Sa 05.02.05 19:44 
[quote="tommie-lie"]
The-FoX hat folgendes geschrieben:
Der benutzbare Speicher bei $7FFFFFFF, darüber kommt Verwaltung, MMFs etc.


Naja, MMFs sind ja auch "benutzbar" ;)

_________________
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: So 06.02.05 11:51 
du kannst es folgendermaßen machen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
function sizeofmem(p: pointer): integer;
var dosh: PImageDosHeader;
    nth: PImageNtHeaders;
begin
  result := 0;
  dosh := p;
  if dosh^.e_magic = IMAGE_DOS_SIGNATURE then
  begin
    nth := pointer(integer(dosh)+dosh^._lfanew);
    if nth^.Signature = IMAGE_NT_SIGNATURE then
    begin
      result := nth^.OptionalHeader.SizeOfImage
    end;
  end;
end;



mit sizeofmem(pointer($00400000)) bekommste die größe des speichers der EXE, kannst auch
sizeofmem(pointer(getmodulehanlde('exename')) benutzen
mit sizeofmem(pointer(getmodulehandle('kernel32.dll'))) bekommste die speichergröße der kernel32.dll wobei
pointer(getmodulehandle('kernel32.dll')) der anfang ist

ne schleife für alle module könntest so machen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
  var i,size: integer;
  for i := 0 to $7FFF do
  begin
    if not isbadreadptr(pointer(i*$10000),$1000then
    begin
      size := sizeofmem(pointer(i*$10000));
      if size <> 0 then
      begin
         // pointer(i*$10000) = anfang des speichers
         // size = größe des speichers
         // mit getmodulefilename(pointer(i*$10000),...) bekommste den modulnamen
      end;
    end;
  end;


beides ungetestet
The-FoX Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 203

Win XP
D6 Pers
BeitragVerfasst: So 06.02.05 18:11 
Hm, deinen code muss ich mir nochmal genauer ansehen.
Danke!