函數的調用流程總結

1 push參數,參數入棧

2 將函數的返回地址(下一條指令的地址)入棧

3 保護sp,將sp賦值給bp

4 分配一定的空間給函數的局部變量使用(讓sp減去該空間大小),爲了安全,用CC填充(int 3h)

5 保護寄存器, 因爲在函數執行過程中會修改寄存器的值,所以在修改之前保存一下之前的值,後面再還原

6 具體的業務代碼

7 恢復寄存器的值,跟第5步相反

8 將bp賦值給sp,恢復bp

9 返回(ret)

通過最終的彙編指令可以看出,在執行調用一個函數:本質就是通過call指令調用函數在代碼段的地址進行直接調用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章