Я создал общую библиотеку (будет использоваться как плагин). Есть много функций, таких как
extern "C" long __attribute__ ((__cdecl__)) SumAgrs(long X, long Y, long Z, long *Out)
{
*Out = X + Y + Z;
return 0;
}
Я хотел бы вызывать функции из этой библиотеки на C ++ (GCC, Linux), но не во время компиляции. Когда я использую встроенный ассемблер, инструкция «push» повреждает локальные переменные, и я понятия не имею, как это исправить.
typedef int (*FARPROC)();
void *dl_handle = dlopen("plugin.so", RTLD_LAZY);
FARPROC proc = (FARPROC)dlsym(dl_handle, "SumAgrs");
long result;
asm("leal %0, %%eax\n\r" \
"pushl %%eax" : : "m" (result));
asm("pushl $10");
asm("pushl $15");
asm("pushl $20");
asm("call *%0" : : "m" (proc));
Двоичный файл результата содержит что-то вроде call * 24 (% esp) . Поэтому мои pushl change % esp и call вызывают ошибку сегментации. Но как избежать такого поведения?
ТНХ