c - 尝试掌握 C 字节码...GNU/gcc 是否/可以像 Clang/LLVM 一样生成 C 字节码?

标签 c gcc llvm clang bytecode

最近有人让我看看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/

相关文章:

objective-c - 如何找到无意的对象指针比较?

c - YACC/LEX 从 C 文件调用解析器

c - 在函数调用中用作数组索引的递增变量

c++ - 将单个 float 移动到 xmm 寄存器

gcc - 为什么gcc "start"函数(在main之前)中有无意义的asm代码?

c++ - clang:如何在 OS X 中进行分析时获取源信息

macos - clang 插件编译错误: undefined symbol llvm::Registry<clang::PluginASTAction,llvm::RegistryTraits<clang::PluginASTAction>>

c - 我想用 openMP 并行化这个函数,但我有一个 'segmentation fault (core dumped)' 。怎么了?

c - 在节点中存储一个 int

c++ - C/C++ Linux GDB API