逆向基础--汇编基础(DOS安装与介绍) (06)
一.介绍安装
DOS全称是Disk Operationg System 是指磁盘操作系统。作为微软在个人计算机上使用的一个操作系统载体,推出了多个版本。
DOS家庭包括 :MS-DOS、 PC-DOS、 DR-DOS、 FreeDOS、NovellDOS、PTS-DOS、 ROM-DOS、JM-0S等,其中以MS-DOS最为著名,最自由开放的则是FreeDOS。
8086CPU不能在win10上运行,下载DOSBOX模拟器(windows操作系统 DOSBox0.74-3-win32-installer.exe)和MASM(网上下载)
1.1 DOSBox安装与配置
默认安装DOSBox0.74-3-win32-installer.exe后,点击桌面dos图标会弹出二个窗口,如下所示:

其中DOSBox Status Windows窗口中会显示.conf配置文件的目录,配置文件一般在C:\Users\用户\AppData\Local\DOSBox\dosbox-0.74-3.conf
如果不想弹出二个窗口,要去掉DOSBox Status Windows窗口,在dos图标-->右键属性-->加上 -noconsole 如下所示
"C:\Program Files (x86)\DOSBox-0.74-3\DOSBox.exe" -userconf -noconsole
修改默认窗口大小,在dosbox-0.74-3.conf配置文件中,配置如下(注意1280X1080中 乘是大写英文字母X)
#windowresolution=original #output=surface windowresolution=1280X1080 output=opengl
下面列出DOS一些常用命令,如下表格
| 命令 | 描述 |
| dir | 查看当前目录下文件和文件夹 |
| cd |
进入特定目录 cd code进入当前目录下的code目录 cd \ 切换到根目录 cd .. 切换到上一级目录 |
| md |
建立特定文件夹 md code 在当前目录下建立一个名字叫code的目录 |
| rd |
删除特定文件夹 rd code 删除当前目录下code文件夹 |
| cls | 清除屏幕,清除屏幕上所有的显示内容,只留下当前的命令行 |
| exit | 退出 |
1.2 MASM安装
MASM 的全称 “Microsoft Macro Assembler” ,作用是汇编语言翻译成机器码,里面有必不可少的编译工具。MASM下载后解压安装MasmSetup.exe, 我这里安装到了D:\DOS\masm目录下,把 bin5目录下的LINK.EXE和MASM.EXE文件复制到D:\DOS\test目录下。这个MASM.EXE是microsoft(R) Macro Assembler Version 5.00,支持16位的dos程序。
二.程序的编译过程
2.1 设置虚拟盘,切换到C盘(注意这里不是操作系统的C盘,而是DOS的虚拟C盘)
mount c D:\DOS\test

2.2 在test文件夹下新建一个1.asm汇编文件, 里面写入16位的dos程序,程序的功能是打印hello wrold!,如下所示
.model small .stack 100h .data msg db 'Hello World!', '$' .code main proc mov ax, @data mov ds, ax ; 打印字符串 mov ah, 09h mov dx, offset msg int 21h ; 退出程序 mov ah, 4Ch int 21h main endp end main
2.3 编译源文件
mams 1.asm //执行这句命令会生成一个中间文件1.obj
注意:要确认程序编译后没有问题会显示: 0 Severe Errors
2.4 链接
link 1.obj //这个命令会产生一个目标文件 1.exe,
2.5 执行目标文件,就会输出hello world! 如下图所示

2.6 上述2.1步骤,每次开启DOSBOX时都要手动执行,为了避免这种麻烦,下面进行配置
找到C:\Users\用户\AppData\Local\DOSBox\dosbox-0.74-3.conf文件,在底部加入二行代码,如下图所示

三.程序的debug过程
之前上把 bin5目录下的LINK.EXE和MASM.EXE文件复制到D:\DOS\test目录下。这里再把bin6目录下的DEBUG.EXE文件也复制进来。查看D:\DOS\test目录下的文件如下所示:

在DOS命令行输入:debug 1.exe 后,提示输入命令,命令有如下所示:
| 命令 | 描述 |
| R |
查看/修改CPU中寄存器的内容。 输入:r ax 回车 会出来一个:在后面输入你想要改变的数据就可以改变ax中的内容 |
| D |
查看内存中的内容 d段地址:偏移地址 回车可以查看该物理地址制定的内存中的内容。如: d1000:0000 |
| E |
改写内存中的内容 e 段地址:偏移地址 要修改的内容。 如 e 1000:000 0 1 2 3 4 5 6 7 |
| U | 将内存中的机器指令翻译成汇编指令 。简单理解为查看源码 |
| T | 命令执行一条机器指令 ,单步执行程序(相当于vs studio中F11调试)。 t命令是“trace”的缩写,即单步跟踪。 |
| A | 以汇编指令的格式在内存中写入一条机器指令 |
| quit | 退出 debug |
3.1 使用r命令查看CPU中的寄存器,常见的AX、BX、CX、DX四种寄存器,以及CS:IP

3.2 使用d命令查看内存的内容,其中076A:0010是物理地址(段地址:偏移地址)
如:076A:0010物理地址内存中第一字节为48h==72d,而十进制72对应的ASCII字符是【 H】

3.3 使用e命令修改内存中的内容,如下所示,物理地址内存中第一字节为48h,改为50h,再使用-d来查看该物理地址中的内容,此时从Hello变成了Pello,也就是H改成了P。如下图所示:
如果要改该物理地址的前三个字节,格式如:-d076A:0010 50 20 10
注意:内存中的修改字节是临时的,DOSBox重启就恢复原来的。

3.4 使用u命令将内存中的机器指令翻译成汇编指令,如下所示
其中PUSH AX 是汇编语言中用于临时保存寄存器数据的一个最基本、最重要的操作
再次输入u命令继续往下查

3.5 使用 t 命令执行一条机器指令 ,单步执行程序

浙公网安备 33010602011771号