首页
社区
课程
招聘
[旧帖] [求助]向高手请教PE文件中的动态链接问题 0.00雪花
发表于: 2008-11-14 17:59 3169

[旧帖] [求助]向高手请教PE文件中的动态链接问题 0.00雪花

2008-11-14 17:59
3169
请问各位高手

PE文件中的idata节说明了本文件引用的外部函数.即从哪个DLL文件中用到哪些函数.

但是我不明白,在PE的text节中,调用外部函数怎样和idata节的说明一一对应.有的PE文件就3个节text ,data,idata.

也就是说,在PE的2进制中我们如何知道当前调用的是IDATA节中的哪个函数.

但是,一般的反汇编工具,都会给出此时调用的是idata节中的哪个函数.

我却找不出他们之间由什么地方发生的联系.

恳请高手解答.

谢谢!

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
text一般是代码段。举个例子,里面调用系统函数的时候采用call dword ptr [00403000]的形式。这里00403000里面存放的就是某个函数的地址。一般来说这些函数地址是连续存放在一起的,比如00403000所在的地方就是一个大的数组,里面存放的就是这个exe所需要的各个外部函数的地址。这些值是exe加载程序在载入exe时根据idata里面的描述,填写进去的。你可以参考一下PE文件里面引入表那一节,讲的挺详细的。
2008-11-14 18:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢,楼上兄弟的解答,可是我还是不明白.
比如printf
......
imagebase 00400000
......
idata RVA 00003000.......
在某个PE文件中的IDATA节是这样的

........
addr  00003194 hint(0268) name:printf
........

在TEXT中调用是这样的
.......
                   push 0040126f
004012A3  call   004013D8
...........

在地址004013D8处
jmp  dword prt [004030C8]
.......

我的问题是,就从机器码来看
怎样把  004030C8   和 004013D8  和  004012A3 联系在一起而且这3个地方又和idata中的addr  00003194 hint(0268) name:printf  联系在一起.

很多反汇编工具在调用处都给出了注释  告诉这里调用msvcrt.dll中的printf了.

我不明白这些工具从哪些地方的数据进而把这3个地址联系到prinf的
2008-11-15 15:03
0
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这个容易,看你的idata节的printf,是不是指向30C8?意思就是让exe装载器把printf函数的地址放到004030C8这个地方。告诉你一个简单的方法看,用PEiD打开你的exe,点subsystem右边的>,然后选Import Table右边的>,选中你要察看的dll,比如msvcrt.dll,在下面看printf,看他的TrunkRVA是不是30C8。这样就联系起来了吧?
2008-11-15 15:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢楼上高手,能具体演示一下吗
2008-11-15 16:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢icersg 兄弟的指点,我明白了.十分感谢
2008-11-15 17:21
0
游客
登录 | 注册 方可回帖
返回
//