-
-
[讨论]EXE的重定位问题
-
发表于:
2008-11-11 14:07
6483
-
很多书上讲EXE是不会被重定位的(也许这句话我说的不是绝对的,因为书上好象也没有这样绝对的说过)。
但是我发现了一点点问题。
我写了一个简单的程序,我的程序对一个EXE用CreateFile()、CreateMapping()、MapViewOfFile()三个函数进行操作,也就是对一个EXE文件进行映射。然后对这个被映射的EXE文件进行PE定位,也就是想得到指向NT头的指针的。
然后得到的指针是:003900D8,这个00390000想必是映射的基地址,因为000000D8我知道在磁盘文件上是DOS头中e_lfanew的值的。但是我对这个基地址为什么会是00390000有点疑虑。我就用OD进行跟踪,跟踪到MapViewOfFile()这个API的下一条指令后,我看了一下eax寄存器,eax的值为003B0000。而得到的NT头的指针可想而知的就是003B00D8了。
我是想知道。为什么OD跟踪到的MapViewOfFile得到的基地址和直接执行得到的基地址不同。这个也算是对EXE的基地址进行重定位了,但为什么DLL重定位就需要有.reloc节,而不能向EXE这样?
我是个菜鸟,也许问题问的比较简单,也比较可笑。但真心希望高手指点一二。谢谢了!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!