先給大家看一段程式:

在Linux上運作此程式時會發生虛拟機重新開機,可是在main函數裡并沒有調用使虛拟機重新開機的函數fun,那他為什麼會重新開機呢?這就用到了棧幀這個知識點。
一、棧幀
棧幀也叫過程活動記錄,是編譯器用來實作過程/函數調用的一種資料結構。
首先必須要明确的一點是也是非常重要的一點,棧是向下生長的,所謂的向下生長是指從高位址->低位址的路徑延伸,棧有棧頂和棧底,那麼棧頂的位址要比棧底的位址低。寄存器ebp稱為“幀指針”或“基址指針”,在未受改變之前始終指向棧幀的開始,也就是棧底。寄存器esp稱為“棧指針”,會随着資料的入棧出棧移動,也就是說,esp始終指向棧頂。
二、解析程式
三、不通過b來修改b的值
程式: