AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Arbeitsspeicher schnell durchsuchen
Thema durchsuchen
Ansicht
Themen-Optionen

Arbeitsspeicher schnell durchsuchen

Ein Thema von MCQ · begonnen am 3. Jan 2006 · letzter Beitrag vom 12. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
MCQ

Registriert seit: 14. Jan 2004
Ort: Dessau
80 Beiträge
 
#1

Arbeitsspeicher schnell durchsuchen

  Alt 3. Jan 2006, 15:57
mit TSearch kann man mit hilfe des integrierten HEX-Editors den Arbeitsspeicher blitzschnell durchsuchen. So kann man schnell finden wo sich bestimmte Werte befinden. Versuche ich allerdings soetwas selber zu programmieren dauert es teilweise über eine Stunde bis der Speicher durchsucht wurde. Was kann man machen damit der Vorgang schneller geht ?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Arbeitsspeicher schnell durchsuchen

  Alt 3. Jan 2006, 18:24
Tja, wie machst du es denn?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
MCQ

Registriert seit: 14. Jan 2004
Ort: Dessau
80 Beiträge
 
#3

Re: Arbeitsspeicher schnell durchsuchen

  Alt 3. Jan 2006, 18:30
Ich durchsuche mit Hilfe von ReadProcessMemory und einem 15kB-Buffer den kompletten Arbeitsspeicher des Programms von 0h bis FFFFFFFFh.
Kann man irgendwie feststellen in welchem Bereich Variablen-Inhalte gespeichert werden, so das ich den Bereich der Durchsucht werden soll eingrenzen kann.
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#4

Re: Arbeitsspeicher schnell durchsuchen

  Alt 3. Jan 2006, 18:44
Ja, such nur die Bereiche bei denen auch was drinsteht.

1. Liefert ReadProcessMemory wahr zurück wenns funktioniert hat und auch wieviel gelesen werden konnte.
2. Schau dir mal VirtualQueryEx an damit kann man sehen wo überhaupt Speicher benutzt wird.
  Mit Zitat antworten Zitat
MCQ

Registriert seit: 14. Jan 2004
Ort: Dessau
80 Beiträge
 
#5

Re: Arbeitsspeicher schnell durchsuchen

  Alt 3. Jan 2006, 19:00
als ich eben mal nach VirtualQueryEx gegooglet hab, hab ich folgende Seite gefunden: http://www.egocrew.de/programmierung...utorial_teil_2

Sehr hilfreich auch für andere Leute die vor dem selben Problem stehen.

@brechi: danke für deine Hilfe ... bisher hast DU jedes meiner Probs gelöst, ich glaub das nächste mal Mail ich dich direkt an *lol*
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#6

Re: Arbeitsspeicher schnell durchsuchen

  Alt 3. Jan 2006, 19:29
Zitat von MCQ:
@brechi: danke für deine Hilfe ... bisher hast DU jedes meiner Probs gelöst, ich glaub das nächste mal Mail ich dich direkt an *lol*
Bitte nicht denn hier im Forum besteht die geringe Chance mit den Beiträgen auch anderen zu helfen
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
napsterxx

Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Arbeitsspeicher schnell durchsuchen

  Alt 25. Feb 2008, 16:55
Ich wüsste gerne wie du das nun gmeacht hast. Ich durchsuche auch alles, und das dauert ja ewig. Kann das irgendwie nicht beschleunigen
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#8

Re: Arbeitsspeicher schnell durchsuchen

  Alt 5. Mär 2008, 12:10
Delphi-Quellcode:
procedure MemLesen(ProcessID: integer);
var
  ProcessHandle: THandle;
  StartMem: DWord;
  lpBuffer: TMemoryBasicInformation;
  myMem: Pointer;
  dwRead: DWord;
  dwOld: DWord;
begin
  ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, false, ProcessID);

  if (ProcessHandle <> 0) then
  begin
    StartMem := 0;
    while (StartMem <> $80000000) do
    begin
      if VirtualQueryEx(ProcessHandle, Pointer(StartMem), lpBuffer, SizeOf(lpBuffer)) = SizeOf(lpBuffer) then
      begin
        if VirtualProtectEx(ProcessHandle, lpBuffer.AllocationBase, lpBuffer.RegionSize, PAGE_EXECUTE_READWRITE, dwOld) then
        begin
          myMem := VirtualAlloc(nil, lpBuffer.RegionSize, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
          if (myMem <> nil) then
          begin
            if ReadProcessMemory(ProcessHandle, lpBuffer.AllocationBase, myMem, lpBuffer.RegionSize, dwRead) and (lpBuffer.RegionSize = dwRead) then
            begin
              Form1.ListBox1.Items.Add('Speicher gelesen: '+IntTohex(DWord(lpBuffer.AllocationBase),8)+', '+
                                        'Größe: '+IntToHex(lpBuffer.RegionSize,8)+', '+
                                        'gespeichert in: '+InttoHex(DWord(myMem),8));
            end;
            VirtualFree(myMem, 0, MEM_RELEASE);
          end;
          VirtualProtectEx(ProcessHandle, lpBuffer.AllocationBase, lpBuffer.RegionSize, dwOld, dwOld);
        end;
        if (lpBuffer.RegionSize <> 0) then
          inc(startMem, lpBuffer.RegionSize) else
          startMem := startMem+$1000;
      end else
        inc(StartMem,$1000);
    end;

  end;

end;
sollte in etwa so gehen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#9

Re: Arbeitsspeicher schnell durchsuchen

  Alt 5. Mär 2008, 12:20
willst du eigentlich den Speicher von anderen Programmen auslesen, oder nur eigenen?

VirtualAlloc und VirtualFree könnte man auch außerhalb der Schleife nur einmal resservieren

das die meißten Programme eh nud 32-Bittig sind und keiner 3G-Erweiterung aktiviert haben werden, reicht eigentlich auch schon 0h bis 7FFFFFFFh (alles darüber gib es da nicht)

und warum 15KB?
es is och alles in 2-Potenzen ausgelegt (also eher 16 KB).
nja und Windows verwaltet den Speicher in 64er-Schritten (also gleich 64KB)


Zitat:
Schau dir mal VirtualQueryEx an damit kann man sehen wo überhaupt Speicher benutzt wird.
das sagt nicht nur ob(wo) wasbelegt ist, sondern auch mit was.
und da kann man sich das Auslesen bestimmter Speicherblöcke, z.B. des gemapptem Programmcodes (der EXE und DLLs), gleich sparren ... da werden wohl kaum Variablen drin sein.


und nochmals aus Interesse ... wie hattest du es denn gemacht?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#10

Re: Arbeitsspeicher schnell durchsuchen

  Alt 5. Mär 2008, 12:29
1) Ausserhalb der Schleife wäre schlecht bei unterschiedlicher RegionSize.
2) 32-Windows arbeitet in $1000 = 4906byte schritten (unter 64Bit mit 32bit programmen -> kp :/)
3) Programmcode ist auch veränderbar, und vill will er nur was auslesen (z.b. Konstanten) die stehen dann z.b da drin
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:37 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