2011-01-12 22 views
8

Sto scrivendo uno script per il disassemblatore IDA Pro in Python usando il plugin idapython. Usando questo, sono in grado di colmare le lacune in cui l'auto-analisi di IDA è insufficiente.Nome CML maneggiando a mano

Un'area che mi ha bloccato è denominazione di posizioni/funzioni con (per mancanza di un termine migliore) "nomi carini". Un esempio di quello che voglio dire è illustrato di seguito:

IDA pretty names sample screenshot

idapython e IDA Pro se stesso solo mi permette di inserire i nomi di base C-ish funzione. Se inserisco simboli non consentiti (ad esempio l'operatore di risoluzione scope), vengono sostituiti con caratteri di sottolineatura. Tuttavia,, se inserisco un nome storpiato a mano (ad esempio __ZN9IOService15powerChangeDoneEm), IDA Pro sarà per me.

Quindi la mia domanda: come posso generare nomi storti per passare attraverso idapython? È disponibile una libreria di maneggevolezza dei nomi? Uno è disponibile in Python? La mia unica speranza è di strappare la funzionalità di maneggevolezza da g++ e aggirare il problema?

+2

Mi auguro ci sia qualche doc in giro che si poteva guardare in ... buona fortuna! –

risposta

6

Alla fine sono riuscito a scavare un po '.

Purtroppo non sono riuscito a trovare lo strumento, ma ho trovato le risorse.

Se tutto ciò che si desidera è nomi di mangle in modo gcc3, allora sappi che gcc3 usa l'ABI Itanium C++, che ha uno schema di mangring dei nomi standardizzato. Ho trovato due documenti:

Per riferimento, entrambi provengono dalla pagina di Wikipedia su Name Mangling.

+0

@ShafikYaghmour: Grazie, l'ho sostituito con un collegamento a un altro sito web (linux-foundation.org). –

+0

Mi sono imbattuto nella tua domanda b/c di questa domanda: http://stackoverflow.com/questions/11335624/what-is-linux-utility-to-mangle-a-c-symbol-name?lq=1 che è simile –

3

Un metodo semplice (alebit hacky) potrebbe essere quello di compilare un file C++ con il simbolo desiderato, quindi estrarre i simboli necessari dalla tabella dei simboli del file .o. Con un po 'di lavoro questo potrebbe essere ben programmabile.

+0

L'ho fatto sul mio primo programma C++, mentre ero al liceo. Non sapevo che non era santard o altro. Ciò mi ha aiutato a implementare un sistema di moduli, consentendo di estendere facilmente il software (gioco). Non ero nemmeno consapevole che questo genere di cose non erano banali. – Klaim

1

Questo è un article che spiega come viene eseguito il mangling dal compilatore Visual. Per il mangling fatto da gcc, penso che tu possa trovare le informazioni nella fonte del pacchetto binutils.