C ++ Name Mangeln von Hand

8

Ich schreibe ein Skript für den IDA Pro Disassembler in Python mit dem %Co_de% Plugin. Damit kann ich die Lücken füllen, in denen IDAs Auto-Analyse nicht funktioniert.

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

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

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

    
Sedate Alien 12.01.2011, 09:45
quelle

4 Antworten

6

Endlich habe ich ein wenig gegraben.

Leider konnte ich kein Tool finden, aber ich habe Ressourcen gefunden.

Wenn Sie nur Mangle-Namen in der gcc3-Mode möchten, dann sollten Sie wissen, dass gcc3 das Itanium C ++ ABI verwendet, das ein standardisiertes Namens-Mangling-Schema hat. Ich habe zwei Dokumente gefunden:

Als Referenz kommen beide von der Wikipedia-Seite auf Name Mangling .

    
Matthieu M. 12.01.2011, 12:28
quelle
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.

    
bdonlan 12.01.2011 10:04
quelle
1

Hier ist ein Artikel , in dem erklärt wird, wie der Visual Compiler das Mangeln durchführt. Ich glaube, dass Sie die Informationen in der Quelle des binutils -Pakets finden können, wenn Sie mit gcc arbeiten.

    
Sylvain Defresne 12.01.2011 12:37
quelle
0

Sie können die Clang AST-Bibliothek verwenden, die eine MangleContext-Klasse hat.

Ссылка

    
João Matos 12.05.2012 03:22
quelle

Tags und Links