Я пытаюсь преобразовать c-программу в C++. Эта программа генерирует набор файлов «* .so», который используется в другой программе, созданной llvm. В основном генерируемый llvm код имеет обратные вызовы к текущему коду. Я загружаю их, используя LDPRELOADОшибка C-C++ при вызове функции
В качестве первого шага я просто компилирую код с помощью C++. Компиляция работала нормально. Но когда бегайте это segfaults. Существует метка dec_blk
, которая должна содержать адрес функции dec_blk()
. Я использую extern "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
Итак, ваша проблема решена? –
@phresnel Nooooooooooooooooo :( – simpleuser