• 2855阅读
  • 4回复

[未解决]如何让程序跳转到指定的地址执行? [复制链接]

上一主题 下一主题
离线那个谁
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2013-10-21
问题:要对绝对地址0x100000赋值,我们可以用(unsigned int*)0x100000 = 1234; 那么要是想让程序跳转到绝对地址是0x100000的函数处去执行,应该怎么做?  
答:*((void (*)( ))0x100000 ) ( );  
首先要将0x100000强制转换成函数指针,即: (void (*)())0x100000。然后再调用它: *((void (*)())0x100000)();
用typedef可以看得更直观些: typedef void(*)() voidFuncPtr; *((voidFuncPtr)0x100000)();
离线那个谁

只看该作者 沙发  发表于: 2013-10-22
接昨天的题:
unsigned char *p1; 
unsigned long *p2; 
p1=(unsigned char *)0x801000; 
p2=(unsigned long *)0x810000;  
请问 
p1+5=______; 
p2+5=______;  


答案稍后公布。
离线那个谁

只看该作者 板凳  发表于: 2013-10-27
回 那个谁 的帖子
那个谁:接昨天的题:
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;

离线1396912770

只看该作者 地板  发表于: 2013-10-28
P1 = 5 * sizeof(unsigned char) + 0x801000 = 0x801005
p2 = 5 * sizeof(unsighed long) + 0x801000 = 0x801014

??????
离线1396912770

只看该作者 4楼 发表于: 2013-10-28
P1 = 5 * sizeof(unsigned char) + 0x801000 = 0x801005


p2 = 5 * sizeof(unsighed long) + 0x801000 = 0x801014
5*sizeof(unsighed long) = 20;
封16进1,所以0x801014
快速回复
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
上一个 下一个