免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 18772 | 回复: 21
打印 上一主题 下一主题

如何获得函数入口地址?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-11 15:14 |只看该作者 |倒序浏览
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 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-04-11 15:15 |只看该作者
这个要用汇编来得到吧?

论坛徽章:
0
3 [报告]
发表于 2008-04-11 15:34 |只看该作者
是这样的:

jmp_value = func_new - func_ptr - 5

jmp_value 是 E9后面的4个BYTES.

func_new是要跳到的地址, func_ptr是本JMP指令所在地址.

你的例子是

jmp_value = 0412D00h - 0411244h - 5 = 1AB7

论坛徽章:
0
4 [报告]
发表于 2008-04-11 15:38 |只看该作者
那个计算公式对不对?按说因该是jmp 后面就跟实地址。但是又不是这样。
test:412D00 = [myfunc]+00001ab7+5;不知道这个公式是否通用,是否合理呢?

论坛徽章:
0
5 [报告]
发表于 2008-04-11 15:40 |只看该作者
JMP后面跟的是偏移

原帖由 toxyboy 于 2008-4-11 15:38 发表
那个计算公式对不对?按说因该是jmp 后面就跟实地址。但是又不是这样。
test:412D00 = [myfunc]+00001ab7+5;不知道这个公式是否通用,是否合理呢?

论坛徽章:
0
6 [报告]
发表于 2008-04-11 15:43 |只看该作者
00411244  jmp         test (412D00h)
而test的入口地址是真正的函数地址:412D00.
它可以根据这个公式算出:


test:412D00 = [myfunc]+00001ab7+5;
[myfunc] = 00411244

我想知道的是如何得到412D00这个地址。上面那个计算公式是不是合理?

是对的? 你自己算

论坛徽章:
0
7 [报告]
发表于 2008-04-11 15:59 |只看该作者

回复 #1 toxyboy 的帖子

是windows 平台的?

论坛徽章:
0
8 [报告]
发表于 2008-04-11 16:00 |只看该作者
估计是.

不是LINUX的. 但是指令是一样的.

原帖由 system888net 于 2008-4-11 15:59 发表
是windows 平台的?

论坛徽章:
0
9 [报告]
发表于 2008-04-11 16:17 |只看该作者
谢谢各位高手。
对不起,我得不严谨造成了大家的误解。
那个myfunc 就是 theFunc

还有一个问题。
原帖由 思一克 于 2008-4-11 15:40 发表
JMP后面跟的是偏移


那么因该是偏移+地址,为什么还要加上 jmp 和那个偏移地址的 5个字节呢?

[ 本帖最后由 toxyboy 于 2008-4-11 16:27 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2008-04-11 16:17 |只看该作者

回复 #1 toxyboy 的帖子

myfunc()没见定义, 是 theFunc???

把正确的代码和对应的asm贴上来,这样看有点断章取义.把简单的计算问题非清晰化了!

[ 本帖最后由 system888net 于 2008-4-11 16:53 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP