跳轉某指定地址、給某絕對地址賦值

1.程序跳轉至某地址執行

(1)把那個要跳的地址轉換成一個函數指針,而後調用這個函數指針。函數

 

如想跳轉至0x30700000地址上運行程序:spa

(*(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。blog

 

2.對絕對地址0x100000賦值12

首先須要將0x100000轉化成一個指針,而後再調用它。class

 

*(unsigned int *)0x100000 = 12;
相關文章
相關標籤/搜索