Я изучаю портирование механизма выполнения сценария, записанного для Windows в Linux; это - для платформы визуализации Winamp AVS. Я не уверен, возможно ли это даже в данный момент. Из того, что я могу сказать, что код берет адреса функций C nseel_asm_atan
и nseel_asm_atan_end
и хранение их в таблице, на которую это может сослаться во время выполнения кода.
Я посмотрел на документацию MS, но я не уверен что __declspec(naked)
действительно делает. Что код пролога и эпилога упоминается в документации? Это связано с соглашениями о вызовах Windows? Действительно ли это портативно? Знать о каких-либо основанных на Linux примерах с помощью подобных методов?
static double (*__atan)(double) = &atan;
__declspec ( naked ) void nseel_asm_atan(void)
{
FUNC1_ENTER
*__nextBlock = __atan(*parm_a);
FUNC_LEAVE
}
__declspec ( naked ) void nseel_asm_atan_end(void) {}
В основном пролог функции устанавливает кадр стека для локальных переменных, а эпилог заботится об его очистке. Обычно это делается компилятором автоматически. Если вы используете __ declspec (naked)
, настройка этого кадра стека будет зависеть от вас, поэтому это даст вам больше гибкости.
Есть много ссылок: здесь , здесь , также здесь и другие.
Компилятор GNU gcc также поддерживает голый, но явно не для x86: найдите «голый» на странице (я не пытался проверить, работает ли он на x86)