原来的add函数存放在代码区,而code数组存放在数据区,并且两者都是实现两个整数相加,所以运行的结果一样
#include<stdio.h>
//代码区
/*int add(int x,int y){
return x+y;
}*/
//全局变量区(数据区)
unsigned char code[]={
0x55, //push ebp
0x8B, 0xEC, //mov ebp,esp
0x83, 0xEC, 0x40, //sub esp,40h
0x53, //push ebx
0x56, //push esi
0x57, //push edi
0x8D, 0x7D, 0xC0, //lea edi,[ebp-40h]
0xB9, 0x10, 0x00, 0x00, 0x00, //mov ecx,10h
0xB8, 0xCC, 0xCC, 0xCC, 0xCC, //mov eax,0CCCCCCCCh
0xF3, 0xAB, //rep stos dword ptr [edi]
0x8B, 0x45, 0x08, //mov eax,dword ptr [ebp+8]
0x03, 0x45, 0x0C, //add eax,dword ptr [ebp+0Ch]
0x5F, //pop edi
0x5E, //pop esi
0x5B, //pop ebx
0x8B, 0xE5, //mov esp,ebp
0x5D, //pop ebp
0xC3 //ret
};
int main(){
int (*f)(int,int)=(int (*)(int,int))&code;
printf("sum:%d\n",f(1,2));
return 0;
}
}