2018年4月12日星期四
// ebp eip esi
// push pop(影響esp的值)
eip(1.放的是當前執行代碼(當前指令)的地址
2.call,ret(從當前函數返回),這倆指令將會影響eip的值
break,// 可翻譯爲jmp(無條件跳轉))
jne
棧幀(大小:1M):ebp(棧幀地址),esp(入參做準備)(相當於棧指針)有關
//text
Data
Heap
Stack
2. 【z = fun(x,y): move eax,[ebp-8h] push eax】eax(累加器)
(push指令esp的值,同時將eax的值壓入指定位置(壓入內存))
Lea :取偏移地址
3.call指令(只要函數被調動,一定會分配一個新的棧幀,包括遞歸)(esp,eip)
Esp-4,把後續地址入棧
4.深刻理解棧幀:
問題一:不同編譯器,棧幀撤銷後,申請新的棧幀殘留值可能還在,可能初始化清理了
問題二:
5.int fun(int a,…)(不定參數問題)(函數返回值借用cpu通用寄存器(本身就具有長性)作爲作爲橋樑傳值,不允許改變通用寄存器裏的值(高級語言裏))
?爲什麼不能給表達式賦值
答:因爲表達式的值存放在通用寄存器裏,本身就具有長性,其值不可被改變
6.棧平衡(由調用者完成)
(作業:查找:__stdcall)