有谁知道如何将C ++代码转换为汇编代码然后反过来呢? 前进的方式非常简单:
g++ -S
我想分析输出并查看它是否已正确编译(仅为了好奇心,但它可以有一些应用程序)。但是,我对汇编的了解非常有限,输出很难理解(如果我使用优化(-O)或使用调试信息(-g)编译,尤其如此。)
是否有用于生成C ++代码的C ++(GCC)反汇编程序?如果没有,是否有任何中间表示,我可以编译C ++代码然后从它返回?
似乎有一些方法可以将C ++转换为C here。海湾合作委员会有什么可以做的吗?
答案 0 :(得分:4)
在一些约束条件下,将汇编语言反汇编回C ++是可能的(例如,使用HexRays) - 主要是因为你得到的C ++会正确地反映基本算法,它可能看起来不会与原始源代码非常相似(尽管C ++名称修改确实有助于保持比原始许多语言更接近原始代码的东西)。
答案 1 :(得分:2)
后一个问题(“是否有任何中间表示,我可以将C ++代码编译成它然后从它返回?”)听起来像是由CLang生成的AST。
答案 2 :(得分:1)
也许您可能有兴趣了解更多关于GCC使用的内部表示,特别是GIMPLE(和Tree-s)。如果你想利用GCC围绕GIMPLE进行大量处理,你应该考虑编写GCC plugin或GCC MELT extension(MELT是一种高级域特定语言,可以轻松扩展GCC)。
但是我所知道的C ++编译器的所有中端内部表示与C ++源代码相差甚远,因为C ++前端已经做了很多工作,并且没有简单的方法可以返回一些有用的C ++。
忠实而完整的decompilation实际上几乎是不可能的,因为编译器生成的汇编代码已经从原始源代码中丢失了一些知识。
答案 3 :(得分:0)
使用objdump -d
反汇编编译对象。除此之外,您无法从中获取更多信息(绝对不是原始来源)。如果我是你,我会信任编译器。