C ++名称手工修改

时间:2011-01-12 09:45:53

标签: python c++ name-mangling ida

我正在使用IDA Pro插件在Python中为idapython反汇编程序编写脚本。使用此功能,我可以填补IDA自动分析不足的空白。

让我难以理解的一个方面是命名位置/功能(因为想要一个更好的术语)“漂亮的名字”。我的意思的一个例子如下所示:

IDA pretty names sample screenshot

idapython和IDA Pro本身只允许我输入基本的C-ish函数名称。如果我输入不允许的符号(例如范围解析运算符),它们将被替换为下划线。 然而,如果我手动输入错位名称(例如__ZN9IOService15powerChangeDoneEm),IDA Pro 为我美化。

因此我的问题是:如何生成错位名称以通过idapython?有可用的名称库吗?一个可用的Python?我唯一的希望是从g++中删除破坏功能并解决这个问题?

4 个答案:

答案 0 :(得分:6)

我终于开始挖了一点。

不幸的是我找不到工具,但我确实找到了资源。

如果你想要的只是gcc3方式的mangle名称,那么就知道gcc3使用Itanium C ++ ABI,它具有标准化的名称修改方案。我找到了两份文件:

供参考,两者均来自Name Mangling上的维基百科页面。

答案 1 :(得分:3)

一个简单的(alebit hacky)方法是用你想要的符号编译C ++文件,然后从.o文件的符号表中提取必要的符号。通过一些工作,这可以很好地编写脚本。

答案 2 :(得分:1)

这是一个article,它解释了Visual编译器如何完成修改。对于gcc完成的修改,我认为您可以在binutils包的源代码中找到相关信息。

答案 3 :(得分:0)

您可以使用Clang AST库,该库具有MangleContext类。

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