Şu anda Intel işlemciler için montaj öğreniyorum. Yığın 'aşağı büyür' yana , nedenderleme esp ve ebp kayıtları
[ebp + 8] ;; This will access the first param
Bence eski ebp değeri ve iade adresi atlamak zorunda konw belli bir elemanı erişmek için eklemek zorunda yapmak ve biz (8 kullanmak yüzden çünkü her biri 4 bayt uzunluğundadır). Bu biraz garip.
_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
Ve halk için bellek ayrılamadı zaman da biz substract zorunda: ebpESP için bir yedekleme kopyası ise
Ayrıca, ana işlevi Ex EBP değeri nedir ebp'den ... Lütfen belirsiz bir cevap verin. Teşekkür ederiz!
Bir main() işlevi normal bir işlevden farklı değil, bir prolog da var. Montaj snippet'inizde bir tane göstermediniz, neden olduğundan emin değilsiniz. Yerliler için alan, esp değil, esp ayarlanarak oluşturulur. –
Aynı sorular var: http://stackoverflow.com/questions/1395591/what-is-exactly-the-base-pointer-and-stack-pointer-to-what-do-they-point ve diğer – Abyx