Для особо тормознутых x86-х повторяю: стек изменить внутри вызывемой функции практически невозможно, ввиду очевидных трудностей с адресуемостью, после, аргументов функции (в старом стеке) и переменных функции (разорванных между старым и новым стеком). Аргументы нельзя дублировать т.к. неизвестно их количество (stdarg.h). А переменные нельзя переместить т.к. куда-то на сторону уже могут быть отданы их адреса, в строчке выше.