函数指针

2019-07-17  本文已影响0人  Justin_901e

函数调用过程: 通过 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}

上一篇 下一篇

猜你喜欢

热点阅读