Я разбираю некоторый код сборки x86, скомпилированный с GCC для назначения.
Непосредственно перед вызовом функции у меня есть:
$esp = 0xffffdbd0
Установка точки останова в самой первой строкевызываемой функции (даже до push
) дает:
$esp = 0xffffdbcc
После нажатия:
$esp = 0xffffdbc8
Так почему же $esp
изменяется таким образом?Теоретически, просто переход к функции не должен изменять указатель стека, а затем он меняется после push
?Что происходит?
Я предполагаю, что это связано с выравниванием, и что каким-то образом происходит какое-то выравнивание за моей спиной с инструкциями по сборке call
и push
.Но это предположение;Понятия не имею.
Может кто-нибудь, кто знает, уточнить?