首页
社区
课程
招聘
[求助]手写DLL文件时发现的一个奇怪现象
发表于: 2008-10-24 18:04 4664

[求助]手写DLL文件时发现的一个奇怪现象

2008-10-24 18:04
4664
本人在手写DLL文件(DLL有一个输出函数,功能是弹出一个对话框, 文章链接:http://bbs.pediy.com/showthread.php?t=75210 ),测试过程中在DLL文件数据目录表部分发现了一个奇怪的问题:

    按照标准的PE结构编写,数据目录表中的输出表(108h),输入表(110h),重定位表(130h)的正常数值如下:
00000100                         00 40 00 00 80 00 00 00           .@..€...
00000110   00 30 00 00 70 00 00 00  00 00 00 00 00 00 00 00   .0..p...........
00000120   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
00000130   00 50 00 00 10 00 00 00  00 00 00 00 00 00 00 00   .P..............

这样设置没问题,调用这个DLL的输出函数可以正常运行,如下图
                                  
如果改变了数据目录表中的输出表,输入表IMAGE_DATA_DIRECTORY结构的Size字段值,甚至把Size的值设置为0,程序都能正常运行。
00000100                         00 40 00 00 00 00 00 00           .@......
00000110   00 30 00 00 00 00 00 00  00 00 00 00 00 00 00 00   .0..............
00000120   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
00000130   00 50 00 00 10 00 00 00  00 00 00 00 00 00 00 00   .P..............
  
但如果把数据目录表中的重定位表的Size字段值改变,无论是变大或者变小,都会出错,其中一个例子如下:
00000130   00 50 00 00 0F 00 00 00  00 00 00 00 00 00 00 00   .P..............

调用这个DLL的输出函数时就会弹出下面的对话框:

所以本人就觉得很奇怪,为什么改变数据目录表中的输出表和输入表的Size字段值没问题,而改变数据目录表中的重定位表的Size字段值就会问题?请知道原因的大侠指点一下小弟。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 141
活跃值: (1135)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
2
DLL装载API函数的地址必须按重定位信息来确定,所以重定位信息不能改。
2008-10-24 22:12
0
雪    币: 251
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
3
谢谢 mavermaver大大的指点
2008-10-25 10:04
0
游客
登录 | 注册 方可回帖
返回
//