日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

9.逆向-函数调用约定

發布時間:2025/6/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 9.逆向-函数调用约定 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

函數調用約定:是對函數調用時參數如何傳遞的一種約定。調用函數先把參數壓入棧然后再傳遞給函數。棧就是定義在進程中的一段內存空間。向下(低地址方向)擴展。且其大小被記錄在PE頭中。也就是說,進程運行時確定占內存的大小。

?

函數執行完成后,棧中的參數如何處理??不處理。

函數執行完畢后,ESP值如何變化??恢復到調用之前。

調用約定分三種?cdecl/stdcall/fastcall

?

cdecl:調用者負責處理棧

VS2015?C++?控制臺程序?默認是cdecl

#include?"stdafx.h"#include?<iostream>#include?<windows.h>#include?<string>using?namespace?std;DWORD??Add(DWORD?dwNumberFirst?,DWORD?dwNumberSecond)?{return?dwNumberFirst?+?dwNumberSecond;}int?main(){DWORD?dwSum?=?Add(1?,2);cout?<<?dwSum?<<?endl;getchar();return?0;}

ADD函數(被調用函數)

?

MAIN函數(調用函數)

?

?

Stdcall:被調用者負責處理棧

#include?"stdafx.h"#include?<iostream>#include?<windows.h>#include?<string>using?namespace?std;DWORD?_stdcall?Add(DWORD?dwNumberFirst?,DWORD?dwNumberSecond)?{return?dwNumberFirst?+?dwNumberSecond;}int?main(){DWORD?dwSum?=?Add(1?,2);cout?<<?dwSum?<<?endl;getchar();return?0;}

ADD函數(被調用函數)

?


MAIN函數(調用函數)

?

雖然Win32API是使用C語言寫的庫,但它使用的是stdcall方式,而不是C語言默認的cdecl方式。這是為了獲得更好的兼容性,使C語言之外的其他語言也能直接調用API。

Fastcall:與stdcall方式基本類似,但該方式通常是使用寄存器(非棧內存)去傳遞那些需要傳遞給函數的部分參數(前兩個)。若某函數有4個參數,則前2個參數分別使用ECX、EDX寄存器傳遞。使用過程中注意ECX和EDX已經包含參數了。Fastcall的目的是為了加大執行速度用的。

總結

以上是生活随笔為你收集整理的9.逆向-函数调用约定的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。