前言
去年暑假,学习了如何脱壳,但是没有深入的了解这一块的知识,现在花费差不多三天的时间总结一下。
代码重定位是把可执行代码从内存的一块区域移动到另外一块地方。但是如果指令中某些操作数没有随着地址的改变而改变,这样势必导致运行出错。如下代码:我们发现全局变量的地址包含在机器码中,而局部变量没有包含绝对地址。
重定位信息是在编译时期由编译器生成,并且保存在应用程序中,在程序执行的时候由操作系统予以修正。如果在装载时该位置已经被别的应用程序使用,操作系统会重新选择一个新的基地址。此时,就需要对所有重定位信息进行纠正,纠正的依据就是PE中的重定位表。