2017年8月12号重编,添加实验记录。
个人总结
- 工具下载
- DOSBOX(dos模拟器)
- debug(32位) 密码:
rr2b
- 说明:以上程序两系统通用,
DOSBOX
会根据设备自行下载对应软件。
windows版
- 网上消息说
windows32
可以直接运行debug
,这里没试过,自行脑补。不过可以确定的是64
位是肯定不行的,需要DOSBOX
模拟运行环境。 - 软件下载好后,双击运行
DOSBox
,假设此时下载的debug.exe
程序在d:/debug_exe
文件夹 - (图片自行脑补)在这个窗口输入:
mount c d:/debug_exe
- 可以理解为目标
c
在d:/debug_exe
文件夹,也可以理解成,定义d:/debug_exe
为目标文件夹. - 我记得这个
c
不一定要写c
,可以写其他字母,验证过d
,其他自行脑补,如果改成其他字母,下面对应跟着改。
- 成功会打印
Drive C is mounted local directory xxxxx
- 之后输入:
c:
,表示进入这个位置- 这个时候会有一些变化
- 默认应该是:
Z:\>_
- 之后会变成:
C:\>_
- 最后,输入
debug
,执行debug
程序,之后会等待你输入内容了。
Mac版
- 网上消息说
Mac
版的debug
需要64
位才能运行,折腾我一下午没成😦, 你说气不气人!!最后,把上面windows
用的debug
往那一放,成了😓。 - 这里
debug.exe
程序需要放在finder -> 前往 -> 个人
下面,你也可以在这里创建文件夹debug_exe
,再放进去。总之,有个坑是,我用的是中文版,所以Document
中文显示文稿,我放在文稿里,敲路径的时候不可能用中文,所以敲Document
,结果找不到。 - 软件下载好后,双击
DOSBox
安装运行 - (图片自行脑补)在这个窗口输入:
mount c ~/debug_exe
- 理解方式上同.
- 成功会打印
Drive C is mounted local directory xxxxx
- 之后输入:
c:
,表示进入这个位置 - 最后,输入
debug
,会等待你输入内容了(这里就是开头说的坑,debug
不出来啊)。
补充
-
Parallels Desktop
虚拟机的windows
无法运行DOSBOX
软件。
debug使用记录
Snip20170623_2.png
- r 命令
r
:查看 CPU 寄存器的状态r ax
:修改一个寄存器中的值Snip20170623_6.png
- d命令
d
:查看Debug
预设的地址处内容d 段地址:偏移地址
:查看从制定内存单元开始的 128 个内存单元的内容- 在上一个指令之后再使用
d
指令,将列出后续 128 个内存单元的内容d 段地址:起始偏移地址 结尾偏移地址
:查看制定范围的内容,亲测初始偏移地址
是两位数会出错?Snip20170623_11.png
- e命令
e 起始地址 数据 数据 数据 ......
:起始地址(段地址:偏移地址);改写内存中的内容。e 段地址:偏移地址
:然后光标停在.
后面表示输入需要修改的内容;这里是按空格键结束该单元的修改;直接按空格键,表示不修改,直接结束该单元的修改;接着显示下一个内存单元的原始地址,并以同样的方式进行修改;按回车结束该操作。- 可以向内存中写入字符/字符串
Snip20170623_19.png
- u 命令
u 初始地址
:查看内存中机器码对应的汇编指令Snip20170623_20.png
- t 命令
t
:执行CS:IP
指向的指令,指令执行后,Debug
会输出CPU中寄存器的状态。Snip20170623_24.png
- a 命令
a 初始地址
:以汇编指令的形式在内存中写入机器码,直接回车,结束操作a
:从一个预设地址开始输入指令,直接回车,结束操作Snip20170623_25.png
Snip20170623_26.png
Snip20170623_27.png
Snip20170623_31.png
假设CPU寻址上限为Max,地址总线的宽度为N,那么:Max=2^N,即cpu寻址范围为:0到2^N。
例:地址总线为16位,侧Max=2^16=65535=0xFFFFh,
即CPU得寻址范围为:0x0000h到0xFFFFh.
网友评论