64,637
社区成员
发帖
与我相关
我的任务
分享
struct Para
{
int n; // 参数个数
void* arg[16];
};
void* call(void *p,Para *para)
{
int *re=0;
int n=para->n;
for(int i=0;i<n;++i)
{
void *a=para->arg[n-1-i];
_asm push a // 压地址
}
_asm
{
call p
mov re,eax
}
for(int i=0;i<n;++i)
_asm add esp,4
return re;
}
void* call_val(void *p,Para *para)
{
int *re=0;
int n=para->n;
for(int i=0;i<n;++i)
{
void *a=para->arg[n-1-i];
int x=*(int*)a; // 姑且假设都是32位整型,其它情况类似
_asm push x // 压值
}
_asm
{
call p
mov re,eax
}
for(int i=0;i<n;++i)
_asm add esp,4
return re;
}
int add(int *a,int *b)
{
return *a+*b;
}
int add_val(int a,int b)
{
return a+b;
}
char* sayhello()
{
static char s[]="hello world";
return s;
}
int _tmain(int argc, _TCHAR* argv[])
{
{
void *f=add_val; // 这里你自己去GetProcAddress,然后赋给f
int i=1,j=2;
Para para={2,{&i,&j}};
int re=(int)call_val(f,¶);
cout <<re <<endl;
}
{
void *f=add;
int i=1,j=2;
Para para={4,{&i,&j}};
int re=(int)call(f,¶);
cout <<re <<endl;
}
{
void *f=sayhello;
Para para={0};
char *re=(char*)call(f,¶);
cout <<re <<endl;
}
return 0;
}
struct Para
{
int n; // 参数个数
void* arg[16];
};
void* call(void *p,Para *para)
{
int *re=0;
int n=para->n;
for(int i=0;i<n;++i)
{
void *a=para->arg[n-1-i];
_asm push a // 压地址
}
_asm
{
call p
mov re,eax
}
return re;
}
void* call_val(void *p,Para *para)
{
int *re=0;
int n=para->n;
for(int i=0;i<n;++i)
{
void *a=para->arg[n-1-i];
int x=*(int*)a; // 姑且假设都是32位整型,其它情况类似
_asm push x // 压值
}
_asm
{
call p
mov re,eax
}
return re;
}
int add(int *a,int *b)
{
return *a+*b;
}
int add_val(int a,int b)
{
return a+b;
}
char* sayhello()
{
static char s[]="helloworld";
return s;
}
int _tmain(int argc, _TCHAR* argv[])
{
{
void *f=add_val; // 这里你自己去GetProcAddress,然后赋给f
int i=1,j=2;
Para para={2,{&i,&j}};
int re=(int)call_val(f,¶);
cout <<re <<endl;
}
{
void *f=add;
int i=1,j=2;
Para para={4,{&i,&j}};
int re=(int)call(f,¶);
cout <<re <<endl;
}
{
void *f=sayhello;
Para para={0};
char *re=(char*)call(f,¶);
cout <<re <<endl;
}
return 0;
}
int fun3(int n)
{
n++;
return n;
}
int mian()
{
int i;
i = fun3(4);
}
i = fun3(4);
0041173E push 4
00411740 call @ILT+515(_fun3) (411208h)
00411745 add esp,4
00411748 mov dword ptr [i],eax //返回