一般我们的dll文件会有重定位,因为我们编译器在编译的时候总是假设我们程序载入内存后的基地址是多少。这样因为如果一旦我们程序运行的平台和我们编译的平台不相同的话,可能载入内存后的基地址是不同的。例如一般我们80386cpu xp系统默认编译的exe文件默认的基地址是00400000h, dll文件 默认的基地址是00100000h ,但是一旦基地址发生改变。 例如dll文件 默认的基地址变为00400000h,那么我们dll文件载入后相应的偏移都会是基于00400000h的。 之前我们的恢复语句例如
mov dword ptr ds:[ASCII字符串 原 内存地址], ASCII值 这显然就是错误的。 ..
正确的恢复语句 :mov dword ptr ds:[ 重定位后的 ASCII字符串内存地址], ASCII值 .........
一般我们的dll文件重定位,都是通过重定位节来自动校正的,但是我们这里自己手动来校正
下面我就以pcshare20071125免费版中的pcmain.dll中的ASCII字符串%s%s%s%s\Parameters给大家做演示。
首先把数据段属性的标志设置为E0000020
然后用OD载入
原入口点100114E3 |