跳转某指定地址、给某绝对地址赋值

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;

 

  

 

转载于:https://www.cnblogs.com/simonLiang/p/6087684.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值