登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 83|回复: 0

调试器原理与编写06

[复制链接]

42

主题

-7

回帖

48

积分

网站编辑

积分
48
发表于 2025-1-8 21:32:19 | 显示全部楼层 |阅读模式

实现多个内存断点

img

多文件编译设置

把要编译和链接的文件加入选项

img

汇编解析输入的命令

strtoul 将字符串转为 指定进制的数值 结果是返回值

会自动跳过空格 如果 转换不了结果为空

参数 字符串 转换后指针位置 进制

.while TRUE
        ;提示:
        invoke crt_printf,  offset g_szCommandTip
        ;输入命令
        invoke crt_gets, offset g_szCommand
        .if eax <= 0
            .continue
        .endif

        ;解析命令
        .if g_szCommand[0] == 'b'  && g_szCommand[1] == 'm' && g_szCommand[2] == 'l' 


        .elseif g_szCommand[0] == 'b'  && g_szCommand[1] == 'm' && g_szCommand[2] == 'c' 


        .elseif g_szCommand[0] == 'b' && g_szCommand[1] == '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[0] == 'g'
            .break
        .endif


    .endw

调试器框架

📎Cr42Dbger.zip

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|断点社区 |网站地图

GMT+8, 2025-1-18 18:52 , Processed in 0.065604 second(s), 27 queries .

Powered by XiunoBBS

Copyright © 2001-2025, 断点社区.

快速回复 返回顶部 返回列表