首页
社区
课程
招聘
求助:关于PE文件加载过程
发表于: 2005-1-28 23:22 7805

求助:关于PE文件加载过程

2005-1-28 23:22
7805
大家好,我是一个正在学习PE文件格式的新人,在我的学习过程中遇到了一些困惑,在网上也搜索了很长时间的相关文章,可是几乎没有找到告答案。希望大家可以帮助我,谢谢。
我想知道的问题是:
   比如说:TEST.EXE文件被加载程序加载时,加载程序遍历了它的IMPOERT段,得到了该EXE文件所需要的DLL文件名DLLTEST.DLL以及该文件中函数名FUNCTIONTEST(假设是按函数名导入)之后,加载程序会对文件名DLLTEST.DLL进行搜索得到文件的路径,然后,加载程序遍历DLLTEST.DLL的EXPORT段得到2个数组(AddressofNames所指向的函数名数组和AddressofFunctions所指向的函数RVAS数组),然后比较函数名数组中的函数名与FUNCTIONTEST,得到FUNCTIONTEST在函数名数组中的位置n,然后再又RVAS数组的首地址+n*4得到FUNCTION函数的入口地址。加载程序便将FUNCTIONTEST的机器码加载到TEST.EXE进程的某个地址空间中。   ①
(以上纯属个人猜测,感谢大家指正)
我想知道的问题是:
    PE加载器此时如何让进程空间中的FUNCTIONTEST函数机器码与EXE文件中调用函数FUNCTIONTEST的代码部分相联系的呢?
    TEST.EXE文件中是否中是否存在一个符号表来保存所有的符号名,并有一个地址表来保存与符号表中所对应的地址数据呢

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 266
活跃值: (269)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
2
最初由 =H2= 发布
....然后,加载程序遍历DLLTEST.DLL的EXPORT段得到2个数组(AddressofNames所指向的函数名数组和AddressofFunctions所指向的函数RVAS数组),然后比较函数名数组中的函数名与FUNCTIONTEST,得到FUNCTIONTEST在函数名数组中的位置n,然后再又RVAS数组的首地址+n*4得到FUNCTION函数的入口地址。加载程序便将FUNCTIONTEST的机器码加载到TEST.EXE进程的某个地址空间中。 ①
(以上纯属个人猜测,感谢大家指正)
我想知道的问题是:
........


DLL一经加载,程序只需要得到FUNCTIONTEST的入口地址就足够了。
2005-1-29 11:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
刚才去书店买了本<<加密与解密>>,我已经在该书中找到了答案。
原来当加载程序完成了DLL的加载之后,会用FUNCTION的地址覆盖掉
AddressofFunctions所指向的函数RVAS数组中与之对应的值,当应用程序要调用函数FUNCTION的时候就直接CALL THEadressofFUNCTION.在PE文件被加载前AddressofFunctions所指向的数组和AddressofNames所指向的函数名数组根本就是同一个数组,现在才明白,原来当PE文件被加载后AddressofFunctions所指向的RVA数组已经被替换成了函数的入口地址表
2005-1-29 13:36
0
游客
登录 | 注册 方可回帖
返回
//