看到滴水逆向的時候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位系統用寄存器傳參,那隻要將函數返回值放在正確的寄存器即可,無所謂壓入時間
小知識點吧,先記錄一下