我正在使用IDA Pro插件在Python中为idapython
反汇编程序编写脚本。使用此功能,我可以填补IDA自动分析不足的空白。
让我难以理解的一个方面是命名位置/功能(因为想要一个更好的术语)“漂亮的名字”。我的意思的一个例子如下所示:
idapython
和IDA Pro本身只允许我输入基本的C-ish函数名称。如果我输入不允许的符号(例如范围解析运算符),它们将被替换为下划线。 然而,如果我手动输入错位名称(例如__ZN9IOService15powerChangeDoneEm
),IDA Pro 将为我美化。
因此我的问题是:如何生成错位名称以通过idapython
?有可用的名称库吗?一个可用的Python?我唯一的希望是从g++
中删除破坏功能并解决这个问题?
答案 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