gdb, Speicher ablegen, formatierte Ausgabe in eine Datei speichern

7

Ich habe eine fehlerhafte (Speicher durchgesickerte) Software. Als Beweis habe ich 1 GB core.dump Datei. Heap-Größe ist 900MB, so offensichtlich, etwas zuweist, aber nicht den Speicher freigeben.

Also, ich habe eine Speicherregion, um dies zu untersuchen.

%Vor%

Dies ist jedoch nur mit bloßem Auge schwer zu erraten, welches Objekt oder welche Struktur nicht freigegeben ist. Meine Idee zu verfolgen ist, "Speichern gdb formatierte Ausgabe in eine Datei, und führen Sie eine Musterübereinstimmung, um zu sehen, welche magische Zeichenfolge am meisten kommt." Also, hier ist meine Frage:

Wie kann ich die Ausgabe des folgenden Befehls in eine Textdatei speichern, damit ich einen Analysator schreiben kann?

%Vor%

Danke für jede Hilfe.

    
Raymond 19.04.2013, 01:48
quelle

3 Antworten

17

Sie können die Funktion "dump" von gdb verwenden, siehe: Ссылка

Für Ihr Beispiel:

%Vor%

Damit erhalten Sie eine einfache binäre Dump-int-Datei result.bin . Sie können auch Folgendes verwenden, um es im Hex-Format auszugeben:

%Vor%

Die Verwendung des Dump-Befehls ist viel übersichtlicher als die Verwendung des gdb-Logging-Hacks (der bei mir irgendwie nicht funktioniert hat).

    
eci 18.11.2013 17:22
quelle
8
  

Wie kann ich die Ausgabe des folgenden Befehls in eine Textdatei speichern, damit ich einen Analysator schreiben kann?

%Vor%

Das ist eigentlich ganz einfach:

%Vor%

Voila, genießen Sie Ihre Ausgabe in gdb.txt .

  

Ich habe eine fehlerhafte (Speicher durchgesickerte) Software. ... "Speichern Sie die gdb-formatierte Ausgabe in eine Datei und führen Sie eine Musterübereinstimmung aus, um zu sehen, welche magische Zeichenkette am meisten auftaucht."

Diese Vorstellung ist ziemlich unwahrscheinlich, um befriedigende Ergebnisse zu liefern. Überlegen Sie:

%Vor%

Selbst wenn du effektiv "magische Fäden sehen könntest, die am meisten auftauchen", wirst du entdecken, dass du alle Fäden durchlässt; aber sie sind nicht das Problem, undichtes "v" ist das Problem.

Was Sie wirklich wollen, ist ein Diagramm zu erstellen, in dem zugewiesene Regionen auf andere zugewiesene Regionen zeigen und ein "root" dieses Graphen finden. Das ist fast unmöglich mit der Hand zu machen.

Was ist mehr , damit Sie das / die Speicherleck (e) finden können? Glücklicherweise gibt es viele Tools, die dieses Problem für Sie lösen können:

Employed Russian 19.04.2013 05:20
quelle
0

Sie können einfach schreiben lkm wird das tun

%Vor%

und die Daten werden im Protokoll angezeigt Schreibe also

%Vor%     
Daniel Haish 10.05.2017 16:55
quelle

Tags und Links