最近有人让我看看C函数是如何编译成LLVM字节码的,然后LLVM字节码是如何翻译成x86 ASM的。作为一个普通的 GNU/gcc 用户,我对此有一些疑问。说得客气一点。
GNU/gcc 也可以编译为字节码吗? 可以吗?我的印象是 gcc 直接编译成 ASM。如果没有,有没有办法像 clang 命令一样查看字节码中介?
~$ clang ~/prog_name.c -S -emit-llvm -o -
<== 将显示 prog_name.c 的字节码。
此外,我发现字节码相当复杂。相比之下,它使汇编语言看起来像是轻松阅读。换句话说:我不知道它在说什么。
有人对模糊地破译字节码提供的信息有任何建议或引用吗?目前我与实际的 ASM 进行了比较和对比,所以说它进展缓慢是一种赞美。
也许这一切都太天真了,但我发现突破这个表面非常具有挑战性。
最佳答案
也许尝试看看 language reference .
据我所知,GCC 确实有一个众所周知的 IR GIMPLE (另一个reference here)。
如果您的意思是更愿意分析汇编输出而不是 IR,您可以查看 this question描述了如何输出汇编文件。
关于c - 尝试掌握 C 字节码...GNU/gcc 是否/可以像 Clang/LLVM 一样生成 C 字节码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15488839/