Ist es möglich, Core-Dateien zu debuggen, die von einer ausführbaren Datei generiert wurden, die ohne gdb-Flag kompiliert wurde?

8

Ist es möglich, Core-Dateien zu debuggen, die von einer ausführbaren Datei generiert wurden, die ohne gdb-Flag kompiliert wurde?

Wenn ja, irgendwelche Zeiger oder Tutorials darauf?

    
Hemanth 02.08.2011, 08:13
quelle

3 Antworten

14

Ja, du kannst. Es wird jedoch nicht einfach sein. Ich werde dir ein Beispiel geben.

Sagen wir, dass ich folgendes Programm namens foo.c :

habe %Vor%

Ich werde es kompilieren und sicherstellen, dass es keine Symbole gibt:

%Vor%

Ok, Zeit es zu starten:

%Vor%

Hoppla! Es scheint einen Fehler zu geben. Lass uns einen Debugger starten:

%Vor%

Hmm, sieht schlecht aus. Keine Symbole. Können wir herausfinden, was passiert ist?

%Vor%

Es sieht so aus, als ob es versucht hat, ein Byte mit dem Wert Null an der Speicherstelle zu speichern, auf die das EAX-Register zeigt. Warum hat es versagt?

%Vor%

Es ist fehlgeschlagen, weil das EAX-Register auf eine Speicheradresse Null zeigt und versucht hat, ein Byte an dieser Adresse zu speichern. Ups!

Leider habe ich keine Hinweise auf gute Tutorials. Die Suche nach "gdb reverse engineering" liefert einige Links, die möglicherweise hilfreiche Teile enthalten.

Aktualisierung:

Ich habe bemerkt, dass es sich um das Debuggen eines Core-Dumps bei einem Kunden handelt. Wenn Sie entpackte Binärdateien an einen Kunden versenden, sollten Sie immer eine Debug-Version dieser Binärdatei behalten.

Ich würde empfehlen, nicht zu strippen und sogar den Quellcode zu geben. Der gesamte Code, den ich schreibe, geht mit dem Quellcode an einen Kunden. Ich war zu oft mit einem inkompetenten Anbieter konfrontiert, der ein defektes Stück Software geliefert hat, aber nicht weiß, wie er es beheben soll. Es ist scheiße.

Dies scheint tatsächlich ein Duplikat dieser Frage zu sein:

Debug-Kerndatei ohne Symbole

Dort gibt es einige zusätzliche Informationen.

    
snap 05.08.2011, 18:49
quelle
2

Ja, Sie können, Das ist es, was Leute, die Risse schreiben, tun, Leider habe ich die Folien und Dokumente eines Kurses, den ich an der Universität besucht habe, nicht mehr, aber googeln für reverse engineering oder disassembly tutorials gibt dir einige Startpunkte. Außerdem ist es wichtig, dass Sie sich im Assemblercode auskennen.

Unsere Klasse basierte auf einem Buch hauptsächlich Kapitel 1 & amp; 3 aber es gibt jetzt eine neue Ausgabe

Computer Systems: A programmer's perspective by R.E. Bryant and D.R. O'Hallaron

erklärt die Grundlagen hinter Computersystemen und gibt Ihnen gute Kenntnisse über die Funktionsweise von Programmen in Systemen.

Beachten Sie auch, dass 64-Bit-CPUs einen anderen Assembler-Code als 32-Bit-CPUs haben, nur für den Fall.

    
Xtroce 11.08.2011 17:16
quelle
-2

Wenn das Programm ohne -g-Flag kompiliert wird, können Sie die Core-Datei nicht debuggen.

Ansonsten können Sie dies tun als: gdb ausführbare Corefile

Mehr finden Sie unter: Ссылка

    
Pradeep 02.08.2011 11:42
quelle

Tags und Links