关于函数指针的一点东西
2008-10-24 13:40
190 查看
最近一直在研究端口与进程的映射问题,然后就涉及到很多底层API的操作,尤其是ntdll和IPHLPAPI中微软未公布的API,自然用到的方法是LoadLibrary和GetProcAddress,这里面就涉及到函数指针的用法,今天专门google了下:
第一种:
1 #include <iostream>
2 using namespace std;
3
4 void (*PFun)();
5
6 void Fun()
7 {
8 cout<<"This is a TEST"<<endl;
9 }
10
11 int main()
12 {
13 Fun();
14 PFun = Fun;
15 PFun();
16 (*PFun)();
17 }
18
其运行结果为:
毫无疑问的说,函数名其实对应着函数在代码段的首地址,可以这么理解
所以地址直接的复制自然可以,尤其是你弄明白汇编下的调用后:
Push a
Push b
Call 0x0o
这种形式,自然明白那个0x0o位置对应得是函数的首地址..。
第二种:
1 #include <iostream>
2 using namespace std;
3
4 typedef void (*PFun)();
5
6 void Fun()
7 {
8 cout<<"This is a TEST"<<endl;
9 }
10
11 int main()
12 {
13 Fun();
14 PFun p;
15 p = Fun;
16 PFun(); //这么写不会报错,但是也没有执行任何代码
17 (*p)();
18 p();
19 }
20
其运行结果为:
与方法一一样,PFun()并没有任何可执行的代码..
借用一句话:typedef的功能是定义新的类型。
恩,就是这样子了
以后想用0x0o这个ID老,NewSketcher以后再用..。
------by 0x0o@Live.Cn
Time: 08.10.24 13;32
第一种:
1 #include <iostream>
2 using namespace std;
3
4 void (*PFun)();
5
6 void Fun()
7 {
8 cout<<"This is a TEST"<<endl;
9 }
10
11 int main()
12 {
13 Fun();
14 PFun = Fun;
15 PFun();
16 (*PFun)();
17 }
18
其运行结果为:
毫无疑问的说,函数名其实对应着函数在代码段的首地址,可以这么理解
所以地址直接的复制自然可以,尤其是你弄明白汇编下的调用后:
Push a
Push b
Call 0x0o
这种形式,自然明白那个0x0o位置对应得是函数的首地址..。
第二种:
1 #include <iostream>
2 using namespace std;
3
4 typedef void (*PFun)();
5
6 void Fun()
7 {
8 cout<<"This is a TEST"<<endl;
9 }
10
11 int main()
12 {
13 Fun();
14 PFun p;
15 p = Fun;
16 PFun(); //这么写不会报错,但是也没有执行任何代码
17 (*p)();
18 p();
19 }
20
其运行结果为:
与方法一一样,PFun()并没有任何可执行的代码..
借用一句话:typedef的功能是定义新的类型。
恩,就是这样子了
以后想用0x0o这个ID老,NewSketcher以后再用..。
------by 0x0o@Live.Cn
Time: 08.10.24 13;32
相关文章推荐
- 关于qsort第四个参数,函数指针作参数的一点思考
- 关于指针的一点东西
- 关于指针数组、数组指针、及函数指针和指向函数指针数组的指针的一点理解
- 关于c语言用双重指针在无需返回的情况下于函数中创建链表的一点小小发现
- 关于函数指针的一点总结
- 关于函数名与函数指针的一点思考
- 关于指针的一点摘要
- 关于函数指针和指针函数
- 12-4-26关于普通函数指针,类成员函数指针,char(*)[]
- 一劳永逸:关于C/C++中指针、数组与函数复合定义形式的直观解释
- 关于指针的一点思考
- 关于指向函数的指针的疑惑
- 关于调用子函数给主函数指针分配内存
- 再开一篇关于C++程序设计基核心之一:引用,指针,符号优先级,函数参数传递
- 指针函数和函数指针--我的一点见解
- 关于C++成员函数指针的使用
- 关于函数不能返回局部对象的引用或者局部对象的指针
- 关于函数和字符指针的一些看法。
- 关于函数指针