acプログラムをc++に変換しようとしています。このプログラムは、llvmによって生成された別のプログラムで使用される「*.so」ファイルのセットを生成します。基本的に、llvmで生成されたコードには、現在のコードへのコールバックがあります。LDPRELOADを使用してこれらをロードしています
最初のステップとして、c++でコードをコンパイルしています。コンパイルは正常に機能していました。しかし、実行すると、segfaultsになります。dec_blk
関数のアドレスを含むはずのラベルがありますdec_blk()
。私はextern "C"
その関数とそのプロトタイプを使用して、解きほぐしを防ぎます。cバージョンで実行すると、ラベルのアドレスは正しくなりますが、c ++バージョンで実行すると、そのラベルの値は0になります。以下に詳細を示します。
LLVMコード
subq $24, %rsp
movq dec_blk, %rax
movq dec_blk+8, %rcx
movq %rdi, 16(%rsp)
movq %rcx, %rdi
movq 16(%rsp), %rcx
movq %rsi, 8(%rsp)
movq %rcx, %rsi
movq 8(%rsp), %rdx
callq *%rax # segfaults here
関数宣言
extern "C"
{
long int dec_blk(void*, long int*, long int* );
}
何を探すべきか手伝っていただけませんか。gdbを使用してデバッグしています