- 论坛徽章:
- 0
|
20可用积分
#include <stdio.h>
void test()
{
int a=0;
return ;
}
typedef void (*pfunc)();
int main(int argc,char** argv)
{
pfunc theFunc=test;
theFunc();
}
// 跟踪汇编代码,发现myfunc 的地址是00411244,它实际执行一个跳转,才到函数test的实际地址:
0041230A mov esi,esp
0041230C call dword ptr [theFunc]
这里看00411244内存:
e9 b7 1a 00 00 。
jmp =e9
后面那个因该相对的跳转地址。
。。。
00411244 jmp test (412D00h)
而test的入口地址是真正的函数地址:412D00.
它可以根据这个公式算出:
test:412D00 = [myfunc]+00001ab7+5;
我想知道的是如何得到412D00这个地址。上面那个计算公式是不是合理??
[ 本帖最后由 toxyboy 于 2008-4-11 16:19 编辑 ] |
|