首页
社区
课程
招聘
为何从DLL的IMPORT TABLE中得不到正确的函数位置
2004-10-3 15:47 4600

为何从DLL的IMPORT TABLE中得不到正确的函数位置

2004-10-3 15:47
4600
要得到自己程序装载的DLL中的一个函数的位置,一般是使用GetProcAdress函数,但现在我不想使用这个函数.因为每个DLL都有自己的导出函数表,使用它可以查得到的,所以我打算用它在程序中查kernel32.dll一些函数的位置.在这里就发现一些奇怪的事了:大部分函数查到的值与用GetProcAdress得到的值一样.但在EnterCriticalSection这个函数就不一样了.使用GetProcAdress得到的值为0x77f755de.而使用import table查到的值为0x77eb38f1.而且这个0x77eb38f1并根本不是一个正确的函数起始地址,调用它是会出错的.这里就搞不懂了,为什么import table中会有一个错误的值呢?应用程序在装载DLL的时候不也是使用它们的IMPORT TALBE来建造自己的IAT吗?是不是有好几种装载方式呢?

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞1
打赏
分享
最新回复 (3)
雪    币: 153
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
verybigbug 2004-10-4 07:14
2
0
听过FW吗?kernel32.dll中并没有实现这个函数, 而是在ntdll.dll中实现的,kernel32中只起一个转发功能。
雪    币: 217
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
drgnmvpn 2004-10-4 10:13
3
0
但关键是IMPORT TABLE中给出的那个地址根本就不是一个正确代码的地址.它是在一个指令的中间.
雪    币: 279
活跃值: (375)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
lordor 6 2004-10-4 12:15
4
0
IMPORT TABLE可能取得的这个不对?用GetProcAdress可以取得其地址,我在xp下用其它工具找也可以找到EnterCriticalSection的地址为0x77f755de,再反过来用0x77f755de找其函数名为RtlEnterCriticalSection,正如verybigbug说的在ntdll.dll中
游客
登录 | 注册 方可回帖
返回