debugger

liebe leser,

ich würde gerne wissen, ob ihr einen Debugger kennt, mit dem man alles in C++ lesen kann und nicht in Assemblersrache. Zwar kann ich schon seit einer weile programmieren, doch gibt es so einiges bei manchen programmen, wo ich gerne wissen würde, wie das Program funktioniert. Und das ganze in Assembler zu lesen finde ich etwas umständlich. Also, falls ihr ein Program kennt mit dem alles in C++ lesen kann, dann bitte gibt mir einen link. Ansonsten müsste ich weiterhin alles in assembler lesen.

MVH

onlyrealnapster



PS
ich brauche keinen Debugger um zu cracken, sondern nur um zu sehen wie alles funktioniert. Ich bin kein Cracker, sondern nur einer der etwas mehr über programme wissen will und sich innerhalb des gesetzes bewegt. Also bitte nicht misverstehen.:)
 
was du haben willst ist nicht so einfach ...

verallgemeinernd kann man sagen, dass man zwar wieder c, respektive c++ code erzeugen könnte, der auch wieder die gleiche funktion erfüllen wurde, aber höchst wahrscheinlich nicht der code ist, der ursprünglich geschrieben wurde ... und es kommt in der regel auch nichts schön lesbares dabei raus ...

bei sprachen wie c# oder java sieht das anders aus, aber bei c/c++ ... ich fürchte du wirst mit asm vorlieb nehmen müssen
 
Hast du vor fremde Programme zu debuggen oder selbst geschriebene Applikationen?
Das macht nämlich bezogen auf die Frage einen großen Unterschied.

MfG
Inliferty
 
Sofern es sich um Programme handelt, die in einer Sprache geschrieben wurden, welche vom Visual Studio unterstützt werden, ist es möglich sich an den Prozess zu hängen und zu debuggen. Sofern man den Quelltext oder auch nur Teile davon hat, kann VS das recht gut und man kann den Prozess debuggen. Geht sogar, wenn der Quelltext nicht mehr in der aktuellen Version des Binaries vorliegt, entsprechende Stellen werden dann einfach übersprungen (wie bei fehlenden auch). Das Binary muss dazu auch nicht auf Debug gebaut sein, allerdings ist VS dann "treffsicherer".
 
Einer der besten sollte Hex-Rays sein:
http://www.hex-rays.com/
Allerdings hat man eben bei modernen Compilern das Problem, dass sie viele Schritte wegoptimieren.
Zudem:
1.Funktionsnamen/Variablen bleiben nicht erhalten (Kommentare sowieso nicht ;) )
2.Reihenfolge der Funktionen muss in der Binary nicht die gleiche sein, Compiler kann zudem Inlining betreiben und damit die Aufrufe "wegoptimieren"
3. Klassenkonstrukte sind "namenlos" und können zudem sehr schlecht rekonstruiert werden (nicht umsonst wird bei C++ versucht, alles schon zur compilierzeit zu ermitteln. Afaik bleiben da kaum Informationen übrig, um überhaupt Klassen rekonstruieren zu können - von Zugriffsmodifikatoren ganz zu schweigen)
4.Schleifen wie do/while/for können teilweise nicht mehr unterschieden werden

usw.
Bei größeren Projekten wird man vielleicht sogar lesbaren Coder erhalten - der aber weit weit vom original entfernt ist ;)
 
danke:). Hat mir sehr wietergeholfen.


Aber was java und c# angeht, die sprachen behersche ich auch:D, altso könnte ich auch die bekommen? Die Debugger meine ich?
 
Aber was java und c# angeht, die sprachen behersche ich auch:D, altso könnte ich auch die bekommen? Die Debugger meine ich?

Mit
bei sprachen wie c# oder java sieht das anders aus, aber bei c/c++ ... ich fürchte du wirst mit asm vorlieb nehmen müssen

ist eher das Decompilieren der in Java/NET Sprachen geschriebener Anwendungen gemeint.
Hier liefern die Compiler sehr viele zusätzlichen Informationen mit (da die Sprachen z.B Reflexion / dynamischer Methoden/Variablenzugriff unterstützen - dementsprechend müssen auch die Namen irgendwo gespeichert sein. Ferner ist der Bytecode
a) frei von Altlasten
b) auf höherem Level als reiner Maschinencode
c)besitzt normalerweise pro Operation einen entsprechenden Opcode, bei denen zudem auf "Low-Level" Optimierung verzichtet wird (das übernimmt dann der Just In Time Compiler der Java/NET Virtual Machine) ).

Dadurch lassen sich die NET/JAVA Dateien sehr gut wieder decompilieren.
Und nicht etwa in C/C++/Pascal/Ada usw. Anwendungen in C#/Java decompilieren[0] ;)

Decompiler für NET:
Reflector


[0]Um genauer zu sein: mit den üblichen Standardcompilern für diese Sprachen erzeugte ausführbare Dateien.
Randfälle gibt es natürlich auf beiden Seiten - es gibt Interpreter für C und "Binary Compiler" für Java bzw. inzwischen recht beliebt
Obfuscatoren für NET
 
Wenns in C/C++ ist, dann ist die Option -g vom gcc/clang dein Freund. Dadurch werden massenhaft Debug-Infos in die erzeugte Objektdatei gepackt, die zum Beispiel gdb lesen kann. Da kann man sich mit list zum Beispiel die Umgebung um den gerade ausgefuehrten Codeabschnitt anzeigen lassen.
 
Zurück
Oben