调试器原理与编写06
### 实现多个内存断点!(./notesimg/1655306761206-34b1941a-fcd5-48ae-889d-eea18a46a67e.png)
#### 多文件编译设置
把要编译和链接的文件加入选项
!(./notesimg/1655307482343-a75ae75d-72bf-41d8-8746-08c246ae5143.png)
#### 汇编解析输入的命令
strtoul将字符串转为指定进制的数值 结果是返回值
会自动跳过空格 如果 转换不了结果为空
参数 字符串 转换后指针位置 进制
```
.while TRUE
;提示:
invoke crt_printf,offset g_szCommandTip
;输入命令
invoke crt_gets, offset g_szCommand
.if eax <= 0
.continue
.endif
;解析命令
.if g_szCommand == 'b'&& g_szCommand == 'm' && g_szCommand == 'l'
.elseif g_szCommand == 'b'&& g_szCommand == 'm' && g_szCommand == 'c'
.elseif g_szCommand == 'b' && g_szCommand == 'm'
;解析命令
;16进制地址
invoke crt_strtoul, offset g_szCommand + 2, addr @pEnd, 16
mov @dwAddr, eax
.if eax == 0
;地址错误
.continue
.endif
;长度
invoke crt_strtoul, @pEnd, addr @pEnd, 16
mov @dwLen, eax
.if eax == 0
;长度错误
.continue
.endif
;设置内存断点
invoke SetBm, @dwAddr, @dwLen
.elseif g_szCommand == 'g'
.break
.endif
.endw
```
#### 调试器框架
[📎Cr42Dbger.zip](https://github.com/x7dbg/Notes/blob/master/%E4%B8%89%E9%98%B6%E6%AE%B5/03.%E8%B0%83%E8%AF%95%E5%99%A8/Cr42Dbger.zip)
页:
[1]