Я сейчас изучаю сборку для процессоров Intel.
Поскольку стек «растет вниз», почему мы должны добавить его для доступа к определенному элементу
[ebp + 8] ;; This will access the first param
Я знаю, что мы должны пропустить старое значение ebp и адрес возврата, и поэтому мы используем 8 (потому что каждый имеет длину 4 байта).
Это немного странно.
Кроме того, если ebp является резервной копией для esp , каково значение ebp в основной функции
Пример:
_start:
;; what's ebp value here ?
push eax
push ebx
call someFunction ;; this will create a stack frame
+-----------+
| param1 |
+-----------+
| param0 | <--- this is [ebp + 8] ( assuming mov ebp, esp )
+-----------+
|ret_address|
+-----------+
| ebp |
+-----------+ <--- esp
А также, когда мы выделяем память для местных жителей, мы должны вычесть из ebp ...
Пожалуйста, дайте однозначный ответ.
Спасибо!