lnxdbg - LENIX的调试器
lnxdbg - LENIX的调试工具
0. 简介
开发程序自然少不了调试器,所以,具备条件后,开发一个LENIX下的调试器就很重要了。也因为自己需要用调试器,好吧,那就开发一个调试器,自己就是第一个用户。
但是,这是一个很初级的系统,还没办法开发出和windows那样功能强大的调试器,只能弄一个简单的凑合着用,然后慢慢升级。
1. 功能
功能比较简单,参考了DOS的debug程序,以及CPU的调试功能,现在完成了设置断点、运行到指定位置、单步执行、显示寄存器内容、显示内存内容,有这几个功能,应该能满足基本的需求了。
lnxdbg采用命令行的方式进行调试,在CUI的条件下,貌似也只能用命令行的方式了。
运行调试器
在命令提示符处输入lnxdbg,意思是lenix debugger,运行后,是这个样子的。
1.1 退出调试器 quit
执行结果是
1.2 装载文件 debug
用法是: debug filename
装载成功后,会显示执行入口的地址,算是给出一个提示
1.3 停止调试 stop
在调试命令提示符输入stop,就会停止当前调试,关闭被调试文件,reg、trace、go这些命令都会失效。
1.4 显示寄存器内容 reg
在命令提示符下输入reg,如果装载了调试文件,就会显示寄存器内容,比如,这里装载了hello.exe,但是并没有开始调试,显示出的寄存器内容程序运行前的初始状态
1.5 显示内存 mem
mem命令用来显示内存数据,这个不用装载被调试程序也能用,
命令格式: mem 内存地址
注意一点,地址需要用16进制的格式。对于不能显示的字符,lnxdbg都用‘.'来代替了
1.6 单步执行 trace
单步执行命令
命令格式 trace 或者 t
这个命令可以让程序一条指令一条的执行,没执行一条指令就显示寄存器内容,用来跟踪程序执行情况。
1.7 运行 go
go用于连续执行,
命令格式是 go 或者 go 暂停地址
也可以是 g 或者 g 暂停地址
如果没有提供暂停地址,程序就会运行到结束,然后返回到调试程序。
1.8 设置断点 sbp
sbp 是set break-point的缩写
具体用法是 sbp 断点地址 【断点类型】【断点长度】
如果只用 sbp 断点地址,就默认是执行断点
1.9 帮助 help
主要用于显示可以使用的调试命令,毕竟有时候自己都会发忽然短路,不记得自己设计的命令了
2. 需要增加的功能
需要增加的功能很多,我当然想把lnxdbg做成和VS的调试器那样了,有没有这个技术能力先不说,就是时间这条就没办法了。所以就只能一点一点升级了。
2.1 反汇编
其实这个功能很重要,毕竟要看程序执行到什么位置以及是什么指令,如果不能直接反汇编看指令,就要看编译器生成的汇编文件,那就飞虫啰嗦了。
2.2 直接编辑汇编代码
在调试的时候,特别是在做测试的时候,有时候仅仅需要临时看几条指令的执行情况,犯不着单独写个程序,