首页 > 代码库 > 跳转某指定地址、给某绝对地址赋值
跳转某指定地址、给某绝对地址赋值
1.程序跳转至某地址执行
(1)把那个要跳的地址转换成一个函数指针,然后调用这个函数指针。
如想跳转至0x30700000地址上运行程序:
(*(void (*)(void))(0x30700000))();
或者
typedef void(*)() p; //先将p设置为返回值为void,形参为void的函数指针
*((p)0x100000)(); //将地址0x30700000强制转换成函数指针,并在前面加上*,调用这个函数
首先(void( * )(void) )是一个强制类型转换符,他将后面的0x30700000这个无符号整数强制转化为一个函数指针,该函数指针所指向的函数入口参数为 void,返回值也是void。 如果到这步你看懂了,那么设(void (*)(void))(0x30700000)为 fp; 那么上面的表达式就可以简化为 (*fp)(); OK,这下就清楚了吧,我们将上面转化好的函数指针进行引用(也就是调用函数指针指向的函数)。
(2)直接用goto;汇编直接用jump。
2.对绝对地址0x100000赋值12
首先需要将0x100000转化成一个指针,然后再调用它。
*(unsigned int *)0x100000 = 12;
跳转某指定地址、给某绝对地址赋值
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。