逆向基礎,函數多級調用

看到滴水逆向的時候C語言基礎

於是寫了一個

int Plus3(int a, int b, int c, int d ,int e)
{

     return Plus2(a,Plus1(b,c),Plus1(d,e));

}

這樣的函數,其實就是加法運算

但是跟着彙編一看還是挺好玩的,

首先是Plus1(d,e) 

就正常push(壓入參數),call(跳轉),add(外平棧)

然後push eax

然後再是 Plus(b,c) 

就正常push(壓入參數),call(跳轉),add(外平棧)

然後push eax

然後push a

call Plus2

深綠色表示壓棧Plus1

淡綠色表示壓棧Plus2

會發現Plus2的壓棧是斷斷續續的

就是因爲它的參數是函數的返回值

也就是說,我隨便啥時候壓棧,只要棧對即可(更深的體會)

即:你便是用了函數返回值作爲參數,我也只要求你最後把數據放到正確的棧位置即可

如果是64位系統用寄存器傳參,那隻要將函數返回值放在正確的寄存器即可,無所謂壓入時間

小知識點吧,先記錄一下

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