首页
社区
课程
招聘
[旧帖] 关于exe本身的函数调用问题,为什么也用了重定向? 0.00雪花
发表于: 2010-3-30 23:15 4028

[旧帖] 关于exe本身的函数调用问题,为什么也用了重定向? 0.00雪花

2010-3-30 23:15
4028
我用vc建一个win32工程,main()里调用一个add(1,2)函数:
在ollydbg反汇编看代码时,如下:
push 2
push 1
call demo.00401005

下面是跳转:
00401005    $ /E9 16000000              jmp    demo.add
0040100A    $ |E9 51000000              jmp    demo.main

00401020  P>/> \55                       push    ebp
00401021   |.  8BEC                       mov     ebp, esp
00401023   |.  83EC 44                  sub     esp, 44
00401026   |.  53                           push    ebx

为何中间要经过00401005? 这样不更简单吗?
push 2
push 1
call demo.00401020

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 194
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我这个程序里,刚好就一个main和一个add函数,它全部在.text段的最前面,都是一个jmp跳转,
这样的意义是什么?
按理来讲,只有import表的dll导入函数才需要这样子。
2010-3-30 23:17
0
雪    币: 1981
活跃值: (771)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
3
你用release编译就不会发了
2010-3-30 23:27
0
雪    币: 75
活跃值: (638)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
哪里好像见到过,有的编译器就是这样jmp过去,有的编译器是直接call过去,
2010-3-30 23:39
0
雪    币: 194
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
搞定了,是debug的问题,
2010-3-31 00:20
0
雪    币: 2523
活跃值: (520)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
这是跳转表,不是重定向……
2010-3-31 09:01
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
如果那两函数是导出的函数,也有可能会这样
2010-3-31 09:09
0
雪    币: 724
活跃值: (81)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
这是Incremental linking的结果,如果你设置Incremental linking为No,则不会发生这种情况,这是为调试设置的,以实现在调试时修改部分代码而不中止运行(Edit and continue),此时所有函数入口都放在固定位置,修改后的函数编译链接后不会覆盖其它函数或数据,函数入口代码转向新版本的函数体。
2010-3-31 09:22
0
雪    币: 249
活跃值: (25)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
9
正解~~~被抢先了,这个问题正好前一段时间碰到过。
2010-3-31 09:56
0
游客
登录 | 注册 方可回帖
返回
//