Domanda

Sto scrivendo una sceneggiatura per il IDA Pro disassembler in Python utilizzando il idapython plugin. Usando questo, sono in grado di colmare le lacune in cui l'auto-analisi di IDA è inferiore.

Un settore che mi ha perplesso è la denominazione posizioni / funzioni con (in mancanza di un termine migliore) "belle nomi". Un esempio di quello che voglio dire è illustrato di seguito:

IDA bei nomi del campione screenshot

idapython e IDA Pro si permettono solo me per inserire i nomi di base C-ish funzione. Se entro i simboli non consentiti (ad esempio l'ambito risoluzione operatore), sono sostituiti con caratteri di sottolineatura. Tuttavia , se entro un nome storpiato a mano (per esempio __ZN9IOService15powerChangeDoneEm), IDA Pro si Prettify questo per me.

Da qui la mia domanda: come posso generare nomi alterati per passare attraverso idapython? C'è una libreria di nome-mangling disponibili? È uno disponibile in Python? È la mia unica speranza di strappare la funzionalità pressare di g++ e di lavoro intorno a quello?

È stato utile?

Soluzione

Finalmente ho trovato il tempo di scavare un po '.

Purtroppo non sono riuscito a trovare strumento, ho trovato le risorse però.

Se invece si è nomi mangano nel campo della moda gcc3, allora sappiate che l'uso gcc3 Itanium C ++ ABI, che ha un nome standardizzato mangling schema. Ho trovato due documenti:

Per avere un riferimento, sia provengono dalla pagina di Wikipedia su Nome Mangling .

Altri suggerimenti

Metodo

Un semplice (alebit hacky) sarebbe quello di compilare un file C ++ con il simbolo che si desidera in esso, quindi estrarre i simboli necessari dalla tabella dei simboli del file .o. Con un po 'di lavoro questo potrebbe essere ben script.

Ecco un articolo che spiega come mutilazione viene eseguita da Visual compilatore. Per pressare fatto da gcc, penso che si può trovare le informazioni nel sorgente del pacchetto binutils.

È possibile utilizzare la libreria Clang AST, che ha una classe MangleContext.

http://clang.llvm.org/doxygen/classclang_1_1CodeGen_1_1MangleContext.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top