Страницы

Поиск по вопросам

воскресенье, 21 октября 2018 г.

Функция без пролога и эпилога

Каким образом задать функцию без пролога и эпилога так, чтобы создавался только код тела?
Например, чтобы функция
void func() { __asm__ volatile__ ("nop"); }
компилировалась в код
0: 90 nop
вместо кода
0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 90 nop 4: 5d pop %ebp 5: c3 ret
Есть ли стандартные средства C (visual c, gcc) ?


Ответ

В стандарте C нет такой возможности. Она может предоставляться конкретными компиляторами. Например, для Visual C++ на платформе x86 это будет выглядеть так:
__declspec( naked ) void func( void ) { __asm { nop } }
Для ARM gcc:
void func() __attribute__ ((naked));
void func(void) { __asm__ __volatile__("nop"); }

Комментариев нет:

Отправить комментарий