2011-01-12 8 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.

Problemi correlati