一、使用软件
debug.exe、masm.exe、link.exe
二、前提条件
1.对汇编语言有一定的了解。
2.对于debug.exe这个软件有一定的操作基础。
三、预备知识
-
1.EXE文件结构
每个exe文件包含一个文件头和一个可重定位程序的映像。文件头包含MS-DOS用于加载程序的信息,例如程序的大小和寄存器的初始值。文件头还指向一个重定位表,该表包含指向程序映像中可重定位段地址的指针链表。exe文件的文件头结构如表所示:
偏移量 | 含义 |
---|---|
00h~01h | MZ,exe文件标记 |
02h~03h | 文件长度除以512的余数 |
04h~05h | 文件长度除以512的商 |
06h~07h | 重定位项的个数 |
08h~09h | 文件头除以16的商 |
0ah~0bh | 程序运行所需最小段数 |
0ch~0dh | 程序运行所需最大段数 |
0eh~0fh | 堆栈段的段值(SS) |
10h~11h | 堆栈段的段值(SP) |
12h~13h | 文件校验和 |
14h~15h | 装入模块入口时的IP值 |
16h~17h | 装入模块代码相对段值(CS) |
18h~19h | 重定位表,开始位置,以位移地址表示 |
1ah~1bh | 覆盖号(程序驻留为零) |
1ch | 重定位表,起点由偏移18h~19h给出,项数由06h~07h标明 |
- 2.debug.exe的w命令
将文件或特定分区写入磁盘。使用不含参数的 w 将从 CS:100 开始写入。BX:CX寄存器中存储着要写入的字节数。在这里因为使用本命令就涉及到这两个点因此命令解释较为简单,如有需要自行百度。
四、思路
我们在跟踪debug的过程中发现debug在初始化过程中有解压缩的过程,所以我们在修改程序过程中需要避开这个加压缩的过程。我的思路就是修改解压缩过程中不会改变的部分,将这个部分的某一部分移动到debug解压缩过程不会涉及的地方。
我在这里写入了两段程序。第一段程序主要起到一个跳转和写入的功能,第二段程序就是需要写入的程序。debug过程结束后开始执行第一段程序,写入第二段程序从而实现修改debug的功能。
五,最后
成品及资料我都上传到了本人资源,大家如果有需要请移步下载具体内容修改过程都在里面。