В настоящее время я изучаю сборку для процессоров Intel. Поскольку стек "растет", почему мы должны добавить для доступа к определенному элементу
[ebp + 8] ;; This will access the first param
Мне нужно пропустить старое значение ebp и обратный адрес, и поэтому мы используем 8 (поскольку каждый из них имеет длину 4 байта). Это странно.
Кроме того, если ebp является резервной копией для esp, что такое значение ebp в основной функции Пример:
_start:
;; what 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... Пожалуйста, дайте недвусмысленный ответ. Спасибо!