LLVMツールチェーンを使用してコンパイル、アセンブル、逆アセンブルするには、次のように実行しようとしています:exampleLLVMツールチェーンを使用したコンパイル、アセンブル、逆アセンブル
私の意図は、それがどのように動作するかを学ぶことです。私は、assmblyの指示を変更および/または並べ替えることによって、パフォーマンステストを行うことができます。で開始する
、私が最初にダミーのプログラムの一口コードを取得:私は一口コードを持っていたら
% llvm-gcc -O3 -emit-llvm hello.c -c -o hello.bc
を、私はLLVMアセンブリを見てみることをLLVM-DISユーティリティを使用してみてくださいコードとLLC(ちょうどしようとするの揺れのために)LLCコードジェネレータを使用してバックネイティブアセンブリに、プログラムをコンパイルする:
% llvm-dis < hello.bc | less
% llc hello.bc -o hello.s
しかし、両方のケースで、私は次のエラーを取得する:
llvm-dis: Invalid MODULE_CODE_GLOBALVAR record
この問題を解決する方法はありますか?
私はグーグルで、私は解決策を見つけられませんでした。私も使用しようとしました
otool -tV hello
しかし出力はllvmと互換性がありません。代わりに、次のアセンブリ形式取得する:
.section __TEXT,__text,regular,pure_instructions
.globl _main
.align 4, 0x90
_main:
Leh_func_begin1:
pushq %rbp
Ltmp0:
movq %rsp, %rbp
Ltmp1:
subq $16, %rsp
Ltmp2:
leaq L_.str(%rip), %rax
を私が取得:
私の猫は、例えばと、後者のアセンブリをコンパイルすると私のために有効ではありません__TEXT,__text) section
start:
0000000100000eb0 pushq $0x00
0000000100000eb2 movq %rsp,%rbp
0000000100000eb5 andq $0xf0,%rsp
0000000100000eb9 movq 0x08(%rbp),%rdi
0000000100000ebd leaq 0x10(%rbp),%rsi
0000000100000ec1 movl %edi,%edx
0000000100000ec3 addl $0x01,%edx
:
% gcc hello.s -o hello.native
感謝あらかじめ。
LLVM-GCCが廃止されました。あなたは強くなることができますか? – arrowd
私は同様の問題があります。あなたは何とかそれを解決しましたか? – Cartesius00