2011-01-12 7 views
8

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

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

IDA pretty names sample screenshot

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

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

+2

Я надеюсь, что есть некоторые документы, вокруг которого вы можете посмотреть в ... удачу! –

ответ

6

Я, наконец, поехал, чтобы копать немного.

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

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

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

+0

@ShafikYaghmour: Спасибо, я заменил его ссылкой на другой сайт (linux-foundation.org). –

+0

Я столкнулся с вашим вопросом b/c этого вопроса: http://stackoverflow.com/questions/11335624/what-is-linux-utility-to-mangle-a-c-symbol-name?lq=1, который аналогичен –

3

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

+0

Я сделал это на своей первой программе на C++, а в старшей школе. Не знал, что это не сантард или что-то еще. Это помогло мне внедрить модульную систему, позволяющую легко и мягко расширять (игру). Я даже не подозревал, что такого рода вещи не тривиальны. – Klaim

1

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

Смежные вопросы