永发信息网

对绝对地址0x100000赋值,可以用(unsigned int*)0x100000=1234;如果让程序跳转到0x100000执行,怎么办?

答案:3  悬赏:60  手机版
解决时间 2021-04-28 03:14
  • 提问者网友:世勋超人
  • 2021-04-27 11:08
对绝对地址0x100000赋值,可以用(unsigned int*)0x100000=1234;如果让程序跳转到0x100000执行,怎么办?
最佳答案
  • 五星知识达人网友:话散在刀尖上
  • 2021-04-27 11:28
我觉得答案讲的够详细了


我只想纠正标题的一个小错误,可能会影响理解:
(unsigned int*)0x100000=1234是不合法的,作者的意思大概是

*(unsigned int*)0x100000=1234注意开头的“ * ”


至于“让程序跳转到0x100000执行”,下面的写法与答案的原理相同
typedef void VoidFunc(); // VoidFunc 是个函数类型
(*(VoidFunc*)0x100000)();// 类比
 *(unsigned int*)0x100000=1234;
(*(    VoidFunc*)0x100000)();
// 不难找到相似之处,只不过一个是把0x100000“变成”unsigned int类型的对象
// 一个是“变成”VoidFunc类型的函数而已追问void(*)()是函数指针吗?(*)是什么意思?追答是函数指针

(*) 是C语言创造者心底的反人类倾向的集中体现——或者说是C语言天怒人怨的声明语法中最奇葩的部分
除非是有兴趣熟练掌握C声明的反人类语法,否则个人不建议多做了解
全部回答
  • 1楼网友:何以畏孤独
  • 2021-04-27 14:26
函数名是入口地址,typedef定义一个函数指针
  • 2楼网友:撞了怀
  • 2021-04-27 12:47
其实就是转换成一个指向绝对地址的指针然后赋值
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯