我想將c程序轉換爲C++。該程序會生成一組「* .so」文件,這些文件在llvm生成的另一個程序中使用。基本上,llvm生成的代碼具有對當前代碼的回調。我使用LDPRELOAD加載這些文件函數調用C到C++錯誤
作爲第一步,我只是用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進行調試
對不起,我的錯別字 – simpleuser 2013-02-21 17:26:14
所以你的問題解決了? – 2013-02-22 13:03:52
@phresnel Nooooooooooooooooo :( – simpleuser 2013-02-24 09:53:08