Я новичок, изучающий некоторую сборку, при сохранении регистра ESP перед вызовом функции имеет ли значение, если вы делаете это путем сложения или вычитания? трудно объяснить, рассмотрим следующее
mov esi, esp
sub esp, 12 // on 32bit OS this would mean that there are 3 arguments to the function
// push, function call etc
cmp esi, esp // should be the same
или
mov esi, esp
// push, function call etc
add esp, 12
cmp esi, esp // should be the same
Также, если по какой-то причине происходит сбой cmp, безопасно ли выполнять mov esp, esi для повторного выравнивания стека?
Спасибо
РЕДАКТИРОВАТЬ: Кроме того, почему мне нужно сделать это для вызова, как sprintf, но MessageBox, кажется, исправить ESP для меня? Как мне узнать, какая функция нуждается в этом, а какая нет?