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.









