【问题标题】:C++ name mangling by hand手动修改 C++ 名称
【发布时间】:2011-06-07 17:24:24
【问题描述】:

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

让我难过的一个领域是用(因为需要更好的术语)“漂亮的名字”来命名位置/功能。我的意思的一个例子如下所示:

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

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

【问题讨论】:

  • 我希望周围有一些文档可供您查看...祝您好运!

标签: python c++ name-mangling ida


【解决方案1】:

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

【讨论】:

  • 我在高中时在我的第一个 C++ 程序中做到了这一点。不知道这不是 santard 或其他任何东西。这帮助我实现了一个模块系统,允许轻松扩展软件(游戏)。我什至不知道这种事情不是微不足道的。
【解决方案2】:

我终于有时间挖一点了。

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

如果您只想以 gcc3 方式修改名称,那么请知道 gcc3 使用 Itanium C++ ABI,它具有标准化的名称修改方案。我找到了两个文件:

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

【讨论】:

  • @ShafikYaghmour:谢谢,我已将其替换为另一个网站 (linux-foundation.org) 的链接。
  • 我遇到了你的问题 b/c 这个问题:stackoverflow.com/questions/11335624/… 这是相似的
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-06-20
      • 2017-05-22
      • 2012-11-03
      • 1970-01-01
      • 2011-11-19
      • 2011-08-01
      相关资源
      最近更新 更多