首先,配置DOSBox+masm虚拟环境,参考:xp中dosbox+masm环境的配置(自用)_stdlibLOL的博客-CSDN博客)
准备一个简单的汇编程序,参照该博客提供的com代码,稍作修改:简易com病毒分析_孑曦曦孑的博客-CSDN博客
.model small
program segment
assume cs:program, ds:program, ss:program, es:program
org 0100h
main proc near
mov dx, offset message
mov ah, 09h
int 21h
mov ah, 4ch
int 21h
ret
main endp
message db 0dh, 'This is a simple com program for a test', 0dh, 0ah, '$'
program ends
end
将上述代码保存为example.asm,利用DOSBox指令生成example.obj和example.exe文件,然后使用debug工具进行转换。
第一步:debug example.exe
使用r指令查看寄存器内容,当前IP寄存器内容为0000,该地址读取的指令为ADD [BX+SI], AL,不是example.asm中要求执行的第一条指令MOV DX, OFFSET MESSAGE 。
第二步:通过-r指令改变IP寄存器中内容为0100H,再用-r查看
该步骤的目的是检查程序是否预留100H空间,若预留了空间,才能转换为COM形式。
可见当前执行指令为第一条语句MOV DX, OFFSET MESSAGE,说明确实预留了100H空间。
第三步:转换为COM文件
-n change.com //确定文件名,必须带后缀
-w //保存
Writing 00137 bytes
-q //退出debug模式
完成上述步骤后,在当前路径成功生成了change.com文件,实现了转换。