【发布时间】:2015-05-06 16:19:02
【问题描述】:
void print()
{
printf("Test");
}
这不起作用
test.exe 中 0x00402826 处未处理的异常:0xC0000005:访问 违规读取位置0x00000000。
int main()
{
typedef void function(void);
function* Execute = (function*)0x00402810;
Execute();
}
但这有效吗?
int main()
{
void(*func)();
func = &print;
cout << func;
getchar();
typedef void function(void);
function* Execute = (function*)0x00402810;
Execute();
}
我正在使用 /Dynamicbase:NO 进行编译
所以地址在每次运行时都是静态的。
【问题讨论】:
-
你试过用
typedef void(function*)();代替typedef void function(void)吗? -
你如何保证你的函数实际上是从 0x402810 开始的?你不能!编译器可以随意移动你的函数。
-
是的,它适用于下面的代码。