Autor Beitrag
SAiBOT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: So 19.02.06 06:00 
Wie kann ich Speicherbereiche weiter minimieren ? hab mal von dem Bereich $00010000 bis $07FFFFFF gelesen, aber das sind immernoch viel zu viele Adressen..., bzw dauert zu lange mit einer ReadProcessMemory-Schleife.
Habe schon Delphi Programme gesehen wo ein dump < 1 Sekunde dauert, und trotzdem der oben genannte Speicherbereich gedeckt wird, wie ist das möglich?
dann habe ich noch von "TMemoryBasicInformation" und "VirtualQueryEx" gehört, bringt mich auch nicht wirklich weiter!

Ich hänge nochmal ein Bild an damit ihr genau wisst was ich meine!
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: So 19.02.06 09:33 
Die beiden kenne ich nicht. Es gibt aber so eine Unit für Prozesspielereien, ich komme aber nicht auf den Namen, verdammt. Vielleicht ist die bei HxD Heyeditor hier im Forum erwähnt...

Ansonsten ist dein Problem doch das du zwar die Baseadress aber nicht die Länge des Speicherbereichs weißt?
Suche im MSDN READPROCESSMEMORY verweißt auch nicht direkt auf eine Lösung :-/
SAiBOT Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 323
Erhaltene Danke: 6

XP SP2; 7
D7; D2009
BeitragVerfasst: So 19.02.06 10:24 
Habe einen alten SourceCode vom "Generic Game Trainer" gefunden, da wird genau das gemacht was ich haben will! Wenn ich die Lösung zu einer Function gepackt habe poste ich die Lösung!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 19.02.06 12:11 
Mit VirtualQueryEx kannst Du die Alloziierungs-Infos des fremden Prozesses abfragen

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
var 
    Ptr : Pointer;
    Offset: DWORD absolute Ptr;

    MemInfoNew: TMemoryBasicInformation;
    MemInfo : Array of TMemoryBasicInformation;
    Idx : Integer;
Begin
    SetLength(MemInfo, 0);
    Idx := 0;

    Offset := 4096; //NIL ist zwar reserviert, kann aber nicht gelesen werden (der Berüchtigte AV-AddrSpace)

    While Offset <> 0 do
    Begin
        If VirtualQueryEx(0, Ptr, @MemInfoNew, SizeOf(MemInfoNew)) <> 0 Then
        Begin
            If Idx > High(MemInfo) Then
                SetLength(MemInfo, Idx + 64);
            MemInfo[Idx] := MemInfoNew;
            Inc(Idx);
            Inc(Offset, MemInfoNew.RegionSize);
        end
        else
        Begin
            Inc(Offset, 4096);
        end;
    end;
    SetLength(MemInfo, Idx);
end;


Prozedure laut Informationen des MSPSDK, Übersetzung mancher Pointer kann in Delphi leicht abweichen.

Der zu behandelnde Prozess ist im Beispiel der aktuelle. Einfach die 0 bei VirtualQueryEx austauschen gegen ein Prozesshandle eurer Wahl ;-)
Die Informationen liegen dann in MemInfo.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.