函数指针

函数调用过程: 通过 call 指令跳转到函数首地址处,执行函数内的指令代码,既然是地址,当然就可以使用指针变量进行存储。

用于保存函数首地址的指针变量被称为函数指针。函数指针的定义:

函数指针定义

函数指针的类型由返回值,参数信息、调用约定组成,它们决定了函数指针在函数调用过程中参数的传递、返回值信息以及如何平衡栈顶。

6 void _cdecl Show() {

7 printf("Show \r\n");

8 }

9 int  _stdcall ShowParam(int nShow) {

11 return nShow;

12 }

14 int main()

15 {

17 void(_cdecl *pShow)(void) = Show;

mov dword ptr ss:[ebp-8],functionpointer.36134D   函数名即为函数首地址,常量

18 pShow();

mov esi,esp

call dword ptr ss:[ebp-8]  获取指针变量地址,间接调用

19 Show();

call functionpointer.36134D  直接调用函数

21 int (_stdcall *pShowParam)(int) = ShowParam;

mov dword ptr ss:[ebp-14],functionpointer.36121C

22 int nRt = pShowParam(5);

mov esi,esp

push 5

call dword ptr ss:[ebp-14]

23 printf("pShowParam %d\r\n", nRt);

mov eax,dword ptr ss:[ebp-20]

push eax

push functionpointer.367B3C

call functionpointer.36132F

25     return 0;

26}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容