编译C++;编码到汇编中,然后反汇编 是否有人知道如何将C++代码转换成汇编代码,然后再进行反向操作? 前进的道路非常简单: g++ -S

编译C++;编码到汇编中,然后反汇编 是否有人知道如何将C++代码转换成汇编代码,然后再进行反向操作? 前进的道路非常简单: g++ -S,c++,linux,gcc,disassembly,intermediate-language,C++,Linux,Gcc,Disassembly,Intermediate Language,我想分析输出,看看它是否被正确编译(只是出于好奇,但它可以有一些应用程序)。然而,我对汇编的知识非常有限,输出很难理解(如果我使用优化(-O)或使用调试信息(-g)编译,这一点尤其正确) 是否有C++汇编语言(C++)汇编程序生成C++代码?如果不是,有没有中间的表示,我可以编译C++代码,然后再从它返回? 似乎有一些方法将C++转换成C。GCC对此有什么建议吗?使用objdump-d反汇编编译对象。除此之外,你无法从中获得更多的信息(而且肯定不是原始来源)。如果我是你,我会信任编译器。使用ob

我想分析输出,看看它是否被正确编译(只是出于好奇,但它可以有一些应用程序)。然而,我对汇编的知识非常有限,输出很难理解(如果我使用优化(-O)或使用调试信息(-g)编译,这一点尤其正确)

<阿德>是否有C++汇编语言(C++)汇编程序生成C++代码?如果不是,有没有中间的表示,我可以编译C++代码,然后再从它返回?
<>似乎有一些方法将C++转换成C。GCC对此有什么建议吗?

使用
objdump-d
反汇编编译对象。除此之外,你无法从中获得更多的信息(而且肯定不是原始来源)。如果我是你,我会信任编译器。

使用
objdump-d
反汇编编译对象。除此之外,你无法从中获得更多的信息(而且肯定不是原始来源)。如果我是你,我会相信编译器。

< p>编译汇编语言回C++是可能的(例如,用),在一些约束条件下,主要是,尽管C++你会正确地反映基本算法,但它看起来可能不像原始源代码。(C++ C++的名字修改有助于保持比你通常使用的其他语言更接近原语的能力)。在一些约束条件下,主要是尽管C++的输出会正确地反映基本算法,但它看起来可能不像原始的源代码(尽管C++名字的修饰可以帮助保持比你通常使用的其他语言更接近原始的东西)。“是否有中间的表示,我可以编译C++代码,然后再从它中返回?”听起来像CLang所生产的AST。

< P>后面的问题(“有没有中间的表示,我可以编译C++代码,然后再从它中恢复?”)听起来像CLang生产的AST。

< P>也许您可能感兴趣的是更多地了解GCC所使用的内部表示,特别是(和TRAE-S)。如果您想利用GCC围绕GIMPLE的大量处理,您应该考虑编写A或A(熔体是一种高级领域特定语言,以方便地扩展GCC)。

虽然我知道的C++编译器的所有中间端内部表示都离C++源代码很远,因为C++前端已经做了大量工作,而且没有简单的方法返回到一些有用的C++。
忠实和完整在实践中几乎是不可能的,因为编译器生成的汇编代码已经从原始源代码中丢失了一些知识。

也许您有兴趣了解更多关于GCC使用的内部表示,特别是(和树-s)如果您想利用GCC围绕GIMPLE的大量处理,您应该考虑编写A或A(熔体是一种高级领域特定语言,以方便地扩展GCC)。 虽然我知道的C++编译器的所有中间端内部表示都离C++源代码很远,因为C++前端已经做了大量工作,而且没有简单的方法返回到一些有用的C++。

忠实和完整在实践中几乎是不可能的,因为编译器生成的汇编代码已经从原始源代码中丢失了一些知识。

编译C++程序后,除了最普通的程序外,没有办法从源程序中逐字地返回源代码。(除非你的编译器做了一些奇怪的事情,比如在二进制文件中包含源代码或其他东西)。你可以得到一个非常粗略的近似值,但仅此而已。对于PC,你可以使用
-masm=intel
选项来获得更高的可读性(常规)SyToAcple希望有一些工具可以生成可以很容易地被拆装的C++字节码的C++版本。如果java java是可能的,那么C++的目的是什么呢?如果它实际上是为了验证编译器的工作,我就不麻烦了。如果它有其他的原因,我建议你去看看学习汇编。如果java是C++ C++的“可能”,它不是事实。C++和java不是一回事,编译模型是不同的。编译C++程序后,除了最普通的程序外,没有办法从源程序中逐字地返回源代码。(除非你的编译器做了一些奇怪的事情,比如在二进制文件中包含源代码或其他东西)。你可以得到一个非常粗略的近似值,但仅此而已。对于PC,你可以使用
-masm=intel
选项来获得更高的可读性(常规)SyToAcple希望有一些工具可以生成可以很容易地被拆装的C++字节码的C++版本。如果java java是可能的,那么C++的目的是什么呢?如果它实际上是为了验证编译器的工作,我就不麻烦了。如果它有其他的原因,我建议你去看看学习汇编。@沙扬:“如果java是可能的,那么C++是可能的。“不,实际上不是。C++和java不是同一个东西,在编译模型上是世界的。从600美元开始,HexLink似乎是一个合理的解决方案。@ Shayan:是的,与免费工具相比,成本相当陡峭。如果你在专业上使用它(或者付钱给别人),OTHH。,它可以很快支付自己的费用。Hexray似乎是一个合理的解决方案,尽管成本从600美元开始。@Shayan:是的,与免费工具相比,成本相当高。OTOH,如果你专业地使用它(或付钱给别人),它可以