一、使用软件
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的功能。
五,最后
成品及资料我都上传到了本人资源,大家如果有需要请移步下载具体内容修改过程都在里面。
本文介绍了如何使用debug.exe、masm.exe和link.exe进行汇编语言程序的修改。文章详细讲解了EXE文件的结构,特别是文件头的内容,并强调了在debug.exe的使用中需避开解压缩过程。作者提出了一个策略,即修改解压缩过程不涉及的部分,插入跳转指令,以实现对程序的修改。最终,作者提供了修改过程的资源供读者参考。
699

被折叠的 条评论
为什么被折叠?



