-
-
[求助]手写DLL文件时发现的一个奇怪现象
-
发表于:
2008-10-24 18:04
4663
-
本人在手写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字段值就会问题?请知道原因的大侠指点一下小弟。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!