先看如下程序:
#include <iostream>
using namespace std;void fun()
{
cout<<"xwl"<<(int)fun<<endl;
}
int main()
{
typedef void(*func)(void);
func Fun = fun;
(*fun)();//1
(*((void (*)( ))Fun )) ( );//2
return 0;
}
显然1、2两种方式都是调用成功的。
于是我们就可以得到了,只要将某绝对地址转化为函数指针,然后调用此函数即可达到目的。
例如:(*((void (*)())0x100000))();跳转到0x100000处执行。
方法二:直接用汇编来调用
__asm{
push eax
mov eax, 0x402260//mov eax,fun
call eax
pop eax
}
直接call fun都是可以的