pc实现跳转。函数指针与绝对地址的跳转
2013-05-29 10:41
274 查看
一小段精彩的 C语言,1和2实现相同的功能,欢迎大伙跟帖呵(特别感谢trio老师)
1 void (*theUboot)(void);
。。。。
theUboot = (void (*)(void))(0x30700000);
theUboot();
。。。。。
2 (*(void (*)(void))(0x30700000))();
aokikyon 发表于 2008-9-10 21:00
看不懂。。。。。。。。ToT
讲解下好吗
shixq 发表于 2008-9-11 09:13
呵呵,强制类型转换,将一个绝对地址转换为一个函数指针,并调用这个函数以跳转到前面提到的绝对地址.
翻译成汇编就是:
mov r0,0x30700000;
mov pc,r0
trio老师说了,会用函数指针就可以成为C语言高手.
目前尚处于模仿阶段,还没有领会函数指针的精髓,继续修炼中...
shixq 发表于 2008-9-11 09:16
原来用2的方式实现要加一个括号...
看来对优先级的领会还是不够,当天少加了一个括号,编译死活通不过,没办法才用1的方法,先定义了一个空指针...
trio 发表于 2008-9-11 10:10
(*(void (*)(void))(0x30700000))();
可以这样理解
首先(void( * )(void) )是一个强制类型转换符,他将后面的0x30700000这个无符号整数强制转化为一个函数指针,该函数指针所指向的函数入口参数为 void,返回值也是void 。 如果到这步你看懂了,那么设(void (*)(void))(0x30700000)为 fp; 那么上面的表达式就可以简化为 (*fp)(); OK,这下就清楚了吧,我们将上面转化好的函数指针进行引用(也就是调用函数指针指向的函数)。
1 void (*theUboot)(void);
。。。。
theUboot = (void (*)(void))(0x30700000);
theUboot();
。。。。。
2 (*(void (*)(void))(0x30700000))();
aokikyon 发表于 2008-9-10 21:00
看不懂。。。。。。。。ToT
讲解下好吗
shixq 发表于 2008-9-11 09:13
呵呵,强制类型转换,将一个绝对地址转换为一个函数指针,并调用这个函数以跳转到前面提到的绝对地址.
翻译成汇编就是:
mov r0,0x30700000;
mov pc,r0
trio老师说了,会用函数指针就可以成为C语言高手.
目前尚处于模仿阶段,还没有领会函数指针的精髓,继续修炼中...
shixq 发表于 2008-9-11 09:16
原来用2的方式实现要加一个括号...
看来对优先级的领会还是不够,当天少加了一个括号,编译死活通不过,没办法才用1的方法,先定义了一个空指针...
trio 发表于 2008-9-11 10:10
(*(void (*)(void))(0x30700000))();
可以这样理解
首先(void( * )(void) )是一个强制类型转换符,他将后面的0x30700000这个无符号整数强制转化为一个函数指针,该函数指针所指向的函数入口参数为 void,返回值也是void 。 如果到这步你看懂了,那么设(void (*)(void))(0x30700000)为 fp; 那么上面的表达式就可以简化为 (*fp)(); OK,这下就清楚了吧,我们将上面转化好的函数指针进行引用(也就是调用函数指针指向的函数)。
相关文章推荐
- C语言中将绝对地址转换为函数指针以及跳转到内存指定位置处执行的技巧
- C语言中将绝对地址转换为函数指针以及跳转到内存指定位置处执行的技巧
- 绝对地址转化为函数指针
- STM8 FOR IAR 中实现绝对地址跳转
- <详解>C语言实现程序跳转到绝对地址0x100000处执行
- ARM 如何实现绝对地址的跳转
- C语言实现程序跳转到绝对地址0x100000处执行
- <详解>C语言实现程序跳转到绝对地址0x100000处执行
- FormatRemoteUrl函数之asp实现格式化成当前网站完整的URL-将相对地址转换为绝对地址的代码
- C语言实现程序跳转到绝对地址0x100000处执行
- QP实现之函数指针数组无法获取正确地址的问题
- FormatRemoteUrl函数之asp实现格式化成当前网站完整的URL-将相对地址转换为绝对地址的代码
- C语言实现程序跳转到绝对地址0x100000处执行
- 函数指针及含参函数指针做参数的实现
- apache实现页面重定向(地址跳转)
- 关于函数参数中有指针无法带出地址
- C和指针之函数之实现简单的printf函数(支持%d, %f, %c, %s)
- 以指针和引用两种参数实现删除单链表L中所有值为X的结点的函数
- what's in string? c语言string类函数实现汇总 都是学习使用指针的好例子啊(算是读书摘抄和笔记吧)
- 171029—函数自学【函数地址和函数指针】