Ассемблерные извращения - натягиваем стек


Рисунок1 передача стековых аргументов напрямую без их фактической засылки в стек


Замечание номер два. Перед аргументами необходимо оставить двойное слово (а в 64-битном режиме — четвертное) для сохранения адреса возврата, при этом, секция данных, где находится это слово должна быть доступна на запись. Если же функция вызывается из одного единственного места и адрес возврата известен заранее, ничего не мешает положить его рядом с аргументами, но тогда функцию придется вызывать командой jump, а не call, что еще больше увеличивает производительность:

 

.code

       MOV EBP, ESP

       MOV ESP, offset func_arg + 4

       JMP my_func

here:

       MOV ESP, EBP

      

.data

func_arg      DD offset here, 696h, 999h, 669h




Начало  Назад  Вперед