AGB  ·  Datenschutz  ·  Impressum  







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

Debugging! nur wie?

Ein Thema von MCQ · begonnen am 12. Jan 2006 · letzter Beitrag vom 12. Jan 2006
Antwort Antwort
Seite 1 von 2  1 2      
MCQ

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

Debugging! nur wie?

  Alt 12. Jan 2006, 01:39
hallo!

ich möchte mit createprocess einen prozess zum debuggen laden. dann möchte ich einen breakpoint auf eine bestimmte adresse setzten und den prozess starten, bis der prozess am breakpoint anhält. dann möchte ich den prozess weiterlaufen lassen und den breakpoint entfernen.

dazu habe ich ein wenig mit der funktion createprocess rumgespielt und den flag DEBUG_PROCESS gesetzt.
frage: wie kann ich jetzt breakpoints in dem prozess setzen, den prozess anhalten bzw. weiterlaufen lassen?

danke!
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Debugging! nur wie?

  Alt 12. Jan 2006, 05:11
Hmmm ... ich versteh nicht ganz worauf du hinaus willst und ich denke wir werden an einander vorbeireden, aber sieh dir mal diese Funktionen an:
MSDN-Library durchsuchenDebugActiveProcess
MSDN-Library durchsuchenWaitForDebugEvent
MSDN-Library durchsuchenDebugBreak
MSDN-Library durchsuchenContinueDebugEvent
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
MCQ

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

Re: Debugging! nur wie?

  Alt 12. Jan 2006, 06:56
Naja, im Prinzip hast du mich schon richtig verstanden. Ich habe einen Prozess im Debug-Mode gestartet und frag mich nun, wie lass ich diesen Prozess erstmal laufen?
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Debugging! nur wie?

  Alt 12. Jan 2006, 07:50
Hat dein Prozes denn irgendwo einen Aufruf der Funktion "DebugBreak"?
Ich glaube, das ist die mindeste Voraussetzung fürs Debugging mit Windows-Mitteln.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
MCQ

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

Re: Debugging! nur wie?

  Alt 12. Jan 2006, 07:55
Nö, bisher hab ich nur folgenden Befehl drin ^^

if not CreateProcess(Nil, PChar(Programm), Nil, Nil, False,DEBUG_PROCESS + DEBUG_ONLY_THIS_PROCESS+PROCESS_ALL_ACCESS, Nil, PChar(ACurrentDir), si, pi) then showmessage(SysErrorMessage(GetLastError())); Der Prozess startet, hält aber sofort an ... oder es sieht zumindest so aus ... Wie gesgt, ich hab bisher noch kein Plan vom Bereich Debugger-Programmierung, versuch mich noch einzuarbeiten.
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Debugging! nur wie?

  Alt 12. Jan 2006, 07:57
Iss ja richtig ... aber in dem Prozess den du startest, muss doch eine Art "Breakpoint" sein.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

Re: Debugging! nur wie?

  Alt 12. Jan 2006, 09:27
Zitat von MCQ:
ich möchte mit createprocess einen prozess zum debuggen laden. dann möchte ich einen breakpoint auf eine bestimmte adresse setzten und den prozess starten, bis der prozess am breakpoint anhält. dann möchte ich den prozess weiterlaufen lassen und den breakpoint entfernen.
Der Prozess, den Du starten möchtest, ist das auch ein Delphi Programm ?

Wenn ja, ist das supereinfach.

Das zu Debuggende Programm in Delphi laden (darf auch eine Dll oder was Anderes sein ).
Im Menü "Start -> Parameter..." kannst du eine Host-Anwendung definieren.
Wenn Du nun in Deinem Delphi Programm einen Breakpoint setzt. und auf Start (F9) drückst, startet nicht Dein Programm, sondern die Hostanwendung. Und wenn die Hostanwendung Dein Programm startet, ist der Delphi Debugger aktiv. Alle Breakpoints und sonstige Funktionalitäten funktionieren.
Das ist übrigens auch der Weg um eine Dll Datei zu debuggen.

Alternativ kannst du auch mit Menü "Start -> Mit Prozess verbinden..." Dich direkt den laufenden Prozess debuggen. Das muß dann auch kein Delphi Programm sein. Du hast aber dann nur das CPU Fenster.

Allgemein zum Thema Debuggen in Delphi gibts hier in der DP ein kleines Tutorial:
Tutorial: Debugging in Delphi für Anfänger und Fortgeschr.

Vieleicht hilft Dir das ja weiter
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Debugging! nur wie?

  Alt 12. Jan 2006, 10:13
Wenn du einen Breakpoint setzen willst, dann musst du den Maschinencode an der betreffenden Stelle überschreiben. Dort sollte dann eine "int 3"-Anweisung stehen. Natürlich musst du dir zum Fortfahren den alten Inhalt merken. Die "int 3"-Anweisung besteht aus einem einzigen Byte ($CC), daher kann man sie an jeder Stelle einfügen.

Die API-Befehle, die du dafür brauchst sind VirtualProtect und WriteProcessMemory. Such mal hier im Forum danach, da findest du einige Beispiele.

Also:
1. Das fremde Programm laden
2. An der betreffenden Stelle mit VirtualProtect und WriteProcessMemory in $CC platzieren
3. Auf das Debug-Ereignis warten
4. Den alten Code an der Stelle wiederherstellen
5. Das Programm weiterlaufen lassen

(wenn das das ist was du meintest)
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
MCQ

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

Re: Debugging! nur wie?

  Alt 12. Jan 2006, 11:06
Also erstmal vorweg, es soll mit Jedem Programm funktionieren.

mmmh .. ihr sagt ich muss erst einen Brakpoint setzen indem ich CC an die betreffende stelle schreibe, ABER .... Der Prozess läuft ja nicht, er wirs in den Speicher geladen und angehalten, ich muss ihn ja erstmal zum laufen bringen damit er an einem Brakpoint anhalten kann, oder versteh ich da was falsch ?


Mal noch ne Frage zwischendurch die auch zu diesem Thema gehört:
Wie verschaff ich mir die nötigen Rechte um mittels GetThreadContext die Register lesen und mittels SetThreadContext die Register schreiben zu können ?
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: Debugging! nur wie?

  Alt 12. Jan 2006, 13:27
Das System wartet auf deinen Aufruf von MSDN-Library durchsuchenWaitForDebugEvent. So gesehen erzeugt das System für dich den allerersten Breakpoint automatisch.

Lies dir mal diesen Artikel durch.

P.S. Mit zwei Minuten googlen findet man etliches an Dokumentation und Beispielen. Um zu verstehen wie's funktioniert muss man nur willig sein, etwas mehr als fünf Zeilen zu lesen.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  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 05:03 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