C++ имя mangling вручную

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

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

IDA pretty names sample screenshot

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

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

4 ответов


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

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

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

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


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


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


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

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