【发布时间】:2013-03-07 11:58:07
【问题描述】:
最近有人告诉我看看 C 函数是如何编译成 LLVM 字节码的,然后是 LLVM 字节码是如何翻译成 x86 ASM 的。作为一个普通的 GNU/gcc 用户,我对此有一些疑问。说得客气一点。
GNU/gcc 也编译成字节码吗? 可以吗? 我的印象是 gcc 直接编译成 ASM。如果没有,有没有办法像使用 clang 命令一样查看字节码中介?
~$ clang ~/prog_name.c -S -emit-llvm -o -
另外,我发现字节码相当拜占庭式。相比之下,它使汇编语言看起来像是轻读。换句话说:我不知道它在说什么。
对于模糊破译字节码提供的信息,有人有任何建议或参考吗? 目前我与实际的 ASM 进行比较和对比,所以说它进展缓慢是一种恭维。
也许这一切都是可笑的天真,但我发现要突破这个表面非常具有挑战性。
【问题讨论】:
-
关于 LLVM 语言本身的文档:llvm.org/docs/LangRef.html
-
@RobertHarvey 看起来比llvm.org/docs/LangRef.html 更有帮助...谢谢
-
@RobertHarvey:请注意,您正在链接到一个 非常 旧版本的 LLVM。 llvmgcc 早已被弃用。它的功能现在通过 dragonegg gcc 插件实现。
-
尝试运行
gcc -fdump-tree-ssa