C++ 手动名称修饰
我正在用Python为IDA Pro反汇编工具编写一个脚本,使用的是idapython
插件。通过这个插件,我可以弥补IDA自动分析的一些不足之处。
我现在遇到的一个问题是如何给位置或函数起个(暂且叫它)“好听的名字”。下面是我想表达的一个例子:
idapython
和IDA Pro本身只允许我输入一些基本的类似C语言的函数名。如果我输入一些不允许的符号(比如作用域解析运算符),它们会被替换成下划线。不过,如果我手动输入一个经过处理的名字(比如__ZN9IOService15powerChangeDoneEm
),IDA Pro会为我美化这个名字。
所以我想问的是:我该如何生成这些经过处理的名字,以便通过idapython
?有没有现成的名字处理库?在Python中有吗?我唯一的希望是把g++
的名字处理功能提取出来,然后绕过这个问题吗?
4 个回答
1
这里有一篇文章,它讲解了Visual编译器是如何进行名称改编的。至于gcc(GNU编译器集合)是怎么做名称改编的,我觉得你可以在binutils
这个软件包的源代码里找到相关信息。
3
一种简单的方法(虽然有点小技巧)是先编写一个包含你想要的符号的C++文件,然后把这个文件编译成一个.o文件。接着,你可以从这个.o文件的符号表中提取出需要的符号。经过一些努力,这个过程可能可以写成一个脚本,变得更方便。
6
我终于抽时间去查了一下。
可惜我没找到工具,不过我找到了一些资料。
如果你只是想用gcc3的方式来处理名字,那你要知道gcc3使用的是Itanium C++ ABI,这是一种标准化的名字处理方案。我找到两个文档:
- Itanium C++ ABI 页面
- 一个调用约定的PDF文档,里面描述了各种编译器的处理方案
作为参考,这两个文档都来自维基百科关于名字处理的页面。