反汇编:函数指针

函数指针的定义:
返回类型 (调用约定 *变量名)(参数列表);

例如:
int (_cdecl *myfun)(int,int);

一般都用来调用非本身程序提供的函数来进行使用

代码如下:

#include<stdio.h>

int main(){
	 
	int (_cdecl *myfun)(int,int);
	
	int i=10;

	myfun = (int (__cdecl *)(int,int))&i;

	myfun(1,2);

	return 0;
}

反汇编如下:

5:        int (_cdecl *myfun)(int,int);
6:
7:        int i=10;
00401028   mov         dword ptr [ebp-8],0Ah  //将当前的i变量的地址赋值给ebp-8指向的地址中
8:
9:        myfun = (int (__cdecl *)(int,int))&i;
0040102F   lea         eax,[ebp-8]  //将当前定义好的函数指针的地址赋值给eax
00401032   mov         dword ptr [ebp-4],eax // eax放到堆栈中 ebp-4的位置
10:
11:       myfun(1,2);
00401035   mov         esi,esp  //将当前栈顶的地址赋值给esi
00401037   push        2  //压入堆栈 0x2
00401039   push        1  //压入堆栈 0x1
0040103B   call        dword ptr [ebp-4] // 将当前地址+指令长度的值压入堆栈,然后将函数指针指向地址中的值进行调用,EIP改变
0040103E   add         esp,8
00401041   cmp         esi,esp
00401043   call        __chkesp (00401070)
12:
13:       return 0;
00401048   xor         eax,eax
14:   }

posted @ 2020-02-21 15:48  zpchcbd  阅读(359)  评论(0编辑  收藏  举报