第10部分-Linux x86 64位彙編 函數調用規則

第10部分-Linux x86 64位彙編 函數調用規則

彙編語言程序中創建函數需要3個步驟。

  1. 定義需要的輸入值
  2. 定義對輸入值執行的操作
  3. 定義如何生成輸出值以及如何把輸出值傳遞給發出調用的程序。

定義輸入值

可以使用寄存器,全局變量或者堆棧。

使用寄存器時候要注意,如果被調用的函數修改主程序使用的寄存器,那麼在被調用之前保存寄存器的當前狀態,並且在函數返回之後恢復寄存器的狀態。可以使用PUSH和POP,或者PUSHA和POPA。

     全局變量是在內存中的位置,程序中所有函數都可以訪問這些內存位置。

定義函數處理

彙編器中聲明函數名稱如下:

.type func1,&function

func1:

函數結束由RET指令定義,執行到RET指令時,程序控制返回主程序,返回的位置是緊跟在調用函數的CALL指令後面的指令。

和高級語言不通,可以把任意數量的函數代碼放在_start之前也可以放在主程序之後。

 

定義輸出值

和輸入值類似,輸出結果可以是下面兩種常見的

把結果存放在一個或多個寄存器中

把結果存放在全局變量內存位置中。

 

訪問函數

創建好函數後,就可以在程序中的任何位置進行訪問。使用CALL指令用於把控制從主程序傳遞到函數。

call function

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