Страницы

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

суббота, 14 декабря 2019 г.

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

#c #ассемблер


Каким образом задать функцию без пролога и эпилога так, чтобы создавался только код тела?

Например, чтобы функция

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) ?
    


Ответы

Ответ 1



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

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

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