首页
社区
课程
招聘
调用地址函数?
发表于: 2005-1-13 19:15 4084

调用地址函数?

2005-1-13 19:15
4084
要调用下面的add函数  比如这个函数在0x04008000这地方  那么把下面改改
fn1=(pfn)0x04008000;
(*fn1)(1,5);   
这样行吗?
  

#include <stdio.h>
typedef int (*pfn) (int,int);

int add(int a,int b){
   int c;
   c=a+b;       
   printf("\n%d\n",c);
}

main()
{
  // printf("ddd");   只要把这行注释"//"去掉 就有N多错误         这是怎么回事?  
   pfn fn1;
   fn1=add;
   printf("func start\n");       
   (*fn1)(1,5);
   getchar();
}          

--------------------Configuration: add - Win32 Release--------------------
Compiling...
add.c
D:\11111\add\add.c(13) : error C2275: 'pfn' : illegal use of this type as an expression
        D:\11111\add\add.c(2) : see declaration of 'pfn'
D:\11111\add\add.c(13) : error C2146: syntax error : missing ';' before identifier 'fn1'
D:\11111\add\add.c(13) : error C2065: 'fn1' : undeclared identifier
D:\11111\add\add.c(14) : warning C4047: '=' : 'int ' differs in levels of indirection from 'int (__cdecl *)(int ,int )'
D:\11111\add\add.c(16) : error C2100: illegal indirection
D:\11111\add\add.c(16) : error C2064: term does not evaluate to a function
Error executing cl.exe.

add.obj - 5 error(s), 1 warning(s)

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2



第1副图  0040102A push 5  
         0040102C push 1  
         call add.00401000   //这里是add()函数吗?可是00401000怎么也不象啊  

第2副图是在  call add.00401000   按F7跟进后的  到底哪个地址才是add()函数的地址啊??
2005-1-13 19:36
0
雪    币: 280
活跃值: (433)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
3
Mov EAX,Dword Ptr SS:[ESP+8] ;取a
Mov ECX,Dword Ptr SS:[ESP+4] ;取返回地址
ADD ECX,EAX ;a+返回地址
PUSH ..
CALL .. ;printf
ADD ESP,8 ;平衡printf堆栈
RETN ; 出错
2005-1-13 20:13
0
游客
登录 | 注册 方可回帖
返回
//