(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
首先須要將0x100000轉化成一個指針,而後再調用它。class
*(unsigned int *)0x100000 = 12;