|
发表于 2022-5-20 11:02:01
|
显示全部楼层
本帖最后由 jackz007 于 2022-5-20 11:28 编辑
exe 文件是由文件头和内存映像两部分构成,其中,文件头定义了程序入口的 CS : IP、堆栈 SS : SP,还有就是数量可变的一系列重定位项。exe 在加载到内存的时候,操作系统会根据文件头中的信息初始化 CS : IP 以及 SS : SP 的数值,并将加载基址的数值加到内存中的每一个重定位项上,这些重定位项都是内存地址,实际上是汇编指令的操作数。exe 文件加载到内存后,实际上只是 exe 文件的内存映像部分,文件头内容并没有直接进入到内存,所以,虽然我们可以用 debug 修改 exe 文件的内存映像,却始终无法直接将这些改变回写入 exe 文件,道理就在这里。
其实,用 debug 修改 exe 文件也是有办法的,首先,需要将 .exe 的文件扩展名去掉,这样,就可以将 exe 文件整个加载到 debug,这个时候,再修改汇编指令就可以保存了。保存完毕后,将文件名改回 .exe 即可。当然,用这种方法修改 exe 文件需要丰富的经验和扎实的汇编功底,否则,你连代码入口都找不到。 |
|