无限内存硬件断点终于找到了
现在,ARM不支持硬件断点,ARM64支持的硬件断点只有4个有朋友一直心心念的UVMDbg无限内存硬件断点,方案已经设计好只等哪天,一鼓作气撸出来了ARM/ARM64无限内存硬件断点无痕软件断点,它的价值必然可以和VMPStudio平起平坐。

breakpoint很容易理解,是程序的断点。在程序某一个地方设置断点,那么程序运行到此处就会暂停。那么,watchpoint呢?watchpoint是一种特殊的断点(所以,首先它还是断点)。在breakpoint的wiki中有相关描述:.即:当内存中一个指定的地址被读、写或者修改的时候就暂停的断点,通常称之为:条件断点或数据断点或观察点。

其实现一般需要CPU支持硬件断点,如果纯软件实现watchpoint,那好像会很耗CPU.(我没去看gdb的软watchpoint的实现,有时间得去研究下,不过如果让我来实现这个功能,应该是设置watchpoint所在的那个页表为不可读/访问,然后在缺页处理那检测当前的页和地址是否是软设置watchpoint所在的页和watchpoint的地址,

0xEXCEPTION_SINGLE_STEP处理方法:1、R0钩挂PsGetContextThread和PsSetContextThread,不允许目标进程获取以及写入硬件断点值2、OD里加载时尝试忽略/不忽略硬件断点3、检查System进程里是否有其他线程读取目标进程中某些线程TCB部分的CONTEXT4、没了。

中断指令执行时,堆栈内容变化如下:标志寄存器被推入堆栈,且SP减2,然后CPU将主程序的下一条指令地址即断点地址的段值和偏移量推入堆栈,且SP减4。某中断处理子程序的入口地址即中断向量,由该中断类型号的4倍为内存地址,在该地址处的4个字节内容即该中断向量。
5、arm64硬件断点和arm区别ARM与ARM64资源都集中在指令集和架构差异上。当ARM为其架构引入64位支持时,它旨在与以前的32位软件兼容,但对于Linux程序员来说,仍然存在一些可能影响代码行为的重大差异。带有A64指令集,也称为arm64或ARM64,我在示例中使用了AArch64寄存器,但我所描述的许多问题也发生在ARMv8A32位执行状态。
除非注明,文章均由 白起网络 整理发布,欢迎转载。