如何让程序跳转到绝对地址去执行
我在网上看面试题目的时候发现一个题目:
让程序跳转到绝对地址0x100000去执行??
给出的答案千篇一律是:
*((void (*)( ))0x100000 ) ( );
首先要将0x100000强制转换成函数指针,即:
(void (*)())0x100000
然后再调用它:
*((void (*)())0x100000)();
用typedef可以看得更直观些:
typedef void(*)() voidFuncPtr;
*((voidFuncPtr)0x100000)();
问题是这个答案对吗???
为了验证我自己写了一段代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void getmemory(void)
{
printf("I am here.\n");
}
int main(void)
{
unsigned int p;
p=(unsigned int)&getmemory;
printf("%#x\n",&getmemory);
void (*pp)()=(void (*)())p;
void (*pp)()=getmemory;
pp();
//这个0x4012f0是第一次执行程序的时候getmemory的地址,运气好第二次它地址没变
//(*((void(*)())0x4012f0))();
// ((void(*)())0x4012f0)();
return 0;
}