2011-01-12 15 views
8

Ich schreibe ein Skript für die IDA Pro Disassembler in Python mit dem idapython Plugin. Damit kann ich die Lücken füllen, in denen IDAs Autoanalyse nicht funktioniert.C++ Name Mangling von Hand

Ein Bereich, der mich ratlos hat, ist die Benennung von Orten/Funktionen mit (aus Mangel an einem besseren Begriff) "hübsche Namen". Ein Beispiel dafür, was ich meine, ist unten dargestellt:

IDA pretty names sample screenshot

idapython und IDA Pro selbst nur mir erlauben, grundlegende C-ish Funktionsnamen eingeben. Wenn ich unzulässige Symbole eingabe (z. B. den Scope-Auflösungsoperator), werden sie durch Unterstriche ersetzt. Allerdings, wenn ich einen entstellten Namen von Hand eingeben (z. B. __ZN9IOService15powerChangeDoneEm), IDA Pro wird verschönern dies für mich.

Daher meine Frage: Wie kann ich mangelnde Namen generieren, um idapython zu durchlaufen? Gibt es eine Namens-Mangling-Bibliothek? Ist eine in Python verfügbar? Ist meine einzige Hoffnung, die Mangling-Funktionalität aus g++ zu reißen und das zu umgehen?

+2

Ich hoffe es einige doc um das heißt Sie in ... viel Glück aussehen könnte! –

Antwort

6

Ich kam endlich dazu, ein wenig zu graben.

Leider konnte ich kein Tool finden, aber ich fand Ressourcen.

Wenn alles, was Sie wollen, Mangle-Namen in der gcc3-Mode ist, dann wissen Sie, dass gcc3 Itanium C++ ABI verwendet, das ein standardisiertes Namens-Mangling-Schema hat. Ich fand zwei Dokumente:

Als Referenz beschreiben, beide stammen aus der Wikipedia-Seite über Name Mangling.

+0

@ShafikYaghmour: Danke, ich habe es durch einen Link zu einer anderen Website (linux-foundation.org) ersetzt. –

+0

Ich kam auf Ihre Frage b/c dieser Frage: http://stackoverflow.com/questions/11335624/what-is-linux-utility-to-mangle-a--symbol-name?lq=1, die ähnlich ist –

3

Eine einfache Methode (alebit hacky) wäre, eine C++ - Datei mit dem gewünschten Symbol zu kompilieren und dann die erforderlichen Symbole aus der Symboltabelle der .o-Datei zu extrahieren. Mit ein bisschen Arbeit könnte das gut skriptfähig sein.

+0

Ich tat dies auf meinem ersten C++ - Programm, während der High School. Wusste nicht, dass es nicht normal oder irgendetwas anderes war. Das hat mir geholfen, ein Modulsystem zu implementieren, das es ermöglicht, das Soft (Spiel) einfach zu erweitern. Mir war nicht einmal bewusst, dass so etwas nicht trivial war. – Klaim

1

Hier ist eine article, die erklärt, wie Mangeln von Visual Compiler durchgeführt wird. Ich glaube, dass Sie die Informationen in der Quelle des binutils-Pakets finden können, um das durch GCC vorgenommene Mangeln zu erstellen.