多语言展示
当前在线:1740今日阅读:190今日分享:11

R3无法设置全局硬件断点

在我们的生活中那,如何操作上述标题的小问题,小编今天就在这里给大家分享一点我的小经验,来增加我们的体验,希望可以给你们带来帮助。
方法/步骤
1

在ARM的架构文档中(ARM官网可下载),Cortext A8, A9, A15才支持硬件断点(通过协处理器CP14操作调试寄存器DBGWCR和DBGWVR来下数据断点(watchpoint),Processor和JTAG Debuger均可以操作它们)(现在跑安卓的机器一般都是A9以上的架构,所以基本都支持硬件断点)

2

ARM系统,可以写汇编,通过MCR协处理器指令操作CP14,从而读写DBGWCR和DBGWVR来下硬件断点。如果是Linux系统可以通过ptrace函数来操作DBGWCR和DBGWVR,下硬件断点。

3

调用ptrace,参数使用PTRACE_GETHBPREGS和PTRACE_SETHBPREGS即可读写硬件断点寄存器,其中第3个参数是寄存器的索引号,正数是读写breakpoint寄存器,负数是读写watchpoint寄存器(即数据断点)。

4

+1,+2是读写第1个断点的地址和控制寄存器,+3,+4是读写第2个断点的地址和控制寄存器,以此类推;而-1,-2是读写第1个数据断点的地址和控制寄存器,-3,-4是读写第2个数据断点的地址和控制寄存器,以此类推。

5

如果第3个参数为0,则表示读取调试信息,例如支持多少个硬件断点,多少个数据断点等。

6

在ptrace_gethbpregs中,如果num为0,调用ptrace_get_hbp_resource_info来获取调试信息,如果num不为0,先调用ptrace_hbp_num_to_idx将num转换为索引(按前文的+1,+2, +3,+4, ... 规则转换,然后返回线程中所缓存的调试配置信息。

注意事项

以上就是小编带给大家的如何操作的关键所在,如果觉得本经验对你们有帮助,请点击正下方的或者是右上角的“大拇指”或分享或“关注TA”给小编我进行一点小小的支持。大家也可以下面发表一下自己的看法。(未经同意,谢绝转载或复制)

推荐信息