找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 213|回复: 4

如何让程序跳转到指定的地址执行?

[复制链接]

210

主题

371

回帖

0

积分

管理员

积分
0
发表于 2013-10-21 22:15:37 | 显示全部楼层 |阅读模式
问题:要对绝对地址0x100000赋值,我们可以用(unsigned int*)0x100000 = 1234; 那么要是想让程序跳转到绝对地址是0x100000的函数处去执行,应该怎么做?  
答:*((void (*)( ))0x100000 ) ( );  
首先要将0x100000强制转换成函数指针,即: (void (*)())0x100000。然后再调用它: *((void (*)())0x100000)();
用typedef可以看得更直观些: typedef void(*)() voidFuncPtr; *((voidFuncPtr)0x100000)();

210

主题

371

回帖

0

积分

管理员

积分
0
 楼主| 发表于 2013-10-22 21:24:14 | 显示全部楼层
接昨天的题:
unsigned char *p1; 
unsigned long *p2; 
p1=(unsigned char *)0x801000; 
p2=(unsigned long *)0x810000;  
请问 
p1+5=______; 
p2+5=______;  


答案稍后公布。

210

主题

371

回帖

0

积分

管理员

积分
0
 楼主| 发表于 2013-10-27 12:35:13 | 显示全部楼层

回 那个谁 的帖子

那个谁:接昨天的题:
unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;  
....... (2013-10-22 21:24)
p1 + 5 = 0x801005;
p2 + 5 = 0x810020;//这里是错误的结果。因为p2在原来的基础上移位20个字节,但是这里要换算成16进制的数字。
                               //所以p2 + 5 = 0x810014;

0

主题

9

回帖

0

积分

新手上路

积分
0
发表于 2013-10-28 23:38:38 | 显示全部楼层
P1 = 5 * sizeof(unsigned char) + 0x801000 = 0x801005
p2 = 5 * sizeof(unsighed long) + 0x801000 = 0x801014

??????

0

主题

9

回帖

0

积分

新手上路

积分
0
发表于 2013-10-28 23:41:50 | 显示全部楼层
P1 = 5 * sizeof(unsigned char) + 0x801000 = 0x801005


p2 = 5 * sizeof(unsighed long) + 0x801000 = 0x801014
5*sizeof(unsighed long) = 20;
封16进1,所以0x801014
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-1 03:33 , Processed in 0.106408 second(s), 20 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表