C++ 手动名称修饰

11 投票
4 回答
4906 浏览
提问于 2025-04-16 09:49

我正在用Python为IDA Pro反汇编工具编写一个脚本,使用的是idapython插件。通过这个插件,我可以弥补IDA自动分析的一些不足之处。

我现在遇到的一个问题是如何给位置或函数起个(暂且叫它)“好听的名字”。下面是我想表达的一个例子:

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,这是一种标准化的名字处理方案。我找到两个文档:

作为参考,这两个文档都来自维基百科关于名字处理的页面。

撰写回答