2

最近、C 関数が LLVM バイトコードにコンパイルされる方法と、LLVM バイトコードが x86 ASM に変換される方法を調べるように言われました。通常の GNU/gcc ユーザーとして、これについていくつか質問があります。控えめに言って。

GNU/gcc もバイトコードにコンパイルされますか? それをできる?私は、gcc が直接 ASM にコンパイルされるという印象を受けました。そうでない場合、clang コマンドと同じようにバイトコードの仲介を表示する方法はありますか?

~$ clang ~/prog_name.c -S -emit-llvm -o -<== は、prog_name.c のバイトコードを表示します。

また、バイトコードはかなりビザンチンだと思います。対照的に、アセンブリ言語は軽い読書のように見えます。言い換えれば、私はそれが何を言っているのかほとんどわかりません。

バイトコードが提供する情報を漠然と解読するためのアドバイスや参考文献はありますか? 現在、私は実際の ASM と比較対照しているので、進行が遅いと言うのは褒め言葉です。

おそらく、これはすべてコミカルにナイーブですが、これの表面を突破するのは非常に難しいと思います.

4

1 に答える 1

3

おそらく、言語リファレンスを見てみてください。

私の知る限り、GCC にはGIMPLEとしてよく知られている IR があります(別の参照はこちら)。

IR ではなくアセンブリ出力を分析したい場合は、アセンブリ ファイルを出力する方法を説明しているこの質問を参照してください。

于 2013-03-18T23:28:48.370 に答える