Кто-то мог объяснить __ declspec (явный)?

Я изучаю портирование механизма выполнения сценария, записанного для 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) {}
9
задан greatwolf 3 February 2015 в 14:27
поделиться

1 ответ

В основном пролог функции устанавливает кадр стека для локальных переменных, а эпилог заботится об его очистке. Обычно это делается компилятором автоматически. Если вы используете __ declspec (naked) , настройка этого кадра стека будет зависеть от вас, поэтому это даст вам больше гибкости.

Есть много ссылок: здесь , здесь , также здесь и другие.

Компилятор GNU gcc также поддерживает голый, но явно не для x86: найдите «голый» на странице (я не пытался проверить, работает ли он на x86)

8
ответ дан 3 November 2019 в 01:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: