У меня есть несколько вопросов о EBP, ESP и кадре стека в следующем коде.
Почему мы вычли 28 из esp? У нас есть две локальные переменные x и y в main. Так почему мы не вычли 8?
И разве мы не помещаем значения в стек справа (или сверху) налево (или снизу)? Так почему же мы добавили 1 к [eax+8] вместо [eax+4]?
func(int a, int b, int c)
{
return a+b+c;
}
main()
{
int x, y=3;
x=func(y,2,1);
}
gcc -faccumulate-outgoing-args
, чтобы избежатьpush
, вместо этого резервируя место и используяmov
относительно ESP. - person Peter Cordes   schedule 27.04.2021[eax+4]
или[eax+8]
нет, и адреса назначения не добавляются. Если вы хотите отредактировать эту часть вопроса так, чтобы она имела какой-то смысл и соответствовала данному ответу, это, вероятно, было бы хорошо, если бы вы могли понять, о чем вы думали 8 лет назад. (Или если кто-то еще хочет отредактировать.) - person Peter Cordes   schedule 27.04.2021