C ++ имя калечат вручную - PullRequest
9 голосов
/ 12 января 2011

Я пишу скрипт для дизассемблера IDA Pro в Python с использованием плагина idapython.Используя это, я могу заполнить пробелы, в которых автоанализ IDA терпит неудачу.

Одна область, которая меня озадачила, - это названия мест / функций с (если не сказать лучше) «красивыми именами».Ниже приведен пример того, что я имею в виду:

IDA pretty names sample screenshot

idapython и сама IDA Pro позволяет мне вводить только основные имена функций C-ish.Если я ввожу запрещенные символы (например, оператор разрешения области видимости), они заменяются подчеркиванием. Однако , если я введу искаженное имя от руки (например, __ZN9IOService15powerChangeDoneEm), IDA Pro подтвердит это для меня.

Отсюда мой вопрос: как я могугенерировать искаженные имена, чтобы пройти через idapython?Доступна ли библиотека именования?Один из них доступен на Python?Является ли моя единственная надежда вырвать функциональность искажения из g++ и обойти это?

Ответы [ 4 ]

6 голосов
/ 12 января 2011

Я наконец нашел время, чтобы немного покопаться.

К сожалению, я не смог найти инструмент, хотя я нашел ресурсы.

Если все, что вам нужно, это искажать имена в стиле gcc3, то знайте, что gcc3 использует ABI-интерфейс Itanium C ++, который имеет стандартную схему искажения имен. Я нашел два документа:

Для справки, оба взяты со страницы Википедии на Имя искажения .

3 голосов
/ 12 января 2011

Один простой (alebit hacky) метод состоит в том, чтобы скомпилировать файл C ++ с нужным символом, а затем извлечь необходимые символы из таблицы символов файла .o.Если немного поработать, это может быть хорошо написано в сценарии.

1 голос
/ 12 января 2011

Вот статья , которая объясняет, как искажение выполняется визуальным компилятором.Я думаю, вы можете найти информацию в источнике пакета binutils.

0 голосов
/ 12 мая 2012

Вы можете использовать библиотеку Clang AST, которая имеет класс MangleContext.

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

...