本文主要讨论硬件断点。
03查漏补缺
-
进程控制里面的F7/F8描述写反了,F7是步入,F8是步过。
-
调试Android的so库时,由于我们使用了 tcp 转发,所以需要在启动设置里面设置主机为本机(127.0.0.1),如果不使用 tcp 转发,那么直接填手机的 ip 地址就行。

硬件断点
03中我们演示的例子,是使用的软件断点,这也是IDA默认的行为。
软件断点的原理是用一条软件断点指令替代断点地址所在位置的操作码字节。在 x86 中,软件断点的指令是 int 3 指令,操作码值是 0xCC。
正常情况下,执行软件断点指令的时候,操作系统会将控制权转移给监控被调试进程的调试器(比如 IDA 的)。利用这种方式,就可以做一些反调试的操作,比如有的程序会故意生成一些异常,这些异常会被调试器捕获到,所以就很烦。还有一个经典的反调试操作,就是自己fork一个子进程调试自己。这样IDA就无法调试该进程了,因为同一时刻,一个进程只能被一个进程附加(调试)。
一些CPU支持硬件辅助的断点,用来代替软件断点。硬件断点使用专用的寄存器配置。在x86中,这些寄存器叫 DR0-7。
硬件断点是有数量限制的,在x86中一般是4个,使用的时候需要注意一下,其他平台可以查一下文档。
设置硬件断点
硬件断点设置方法:先设置普通断点,编辑断点,选中 [hardware],并配置右下角选项,如图:

本文详细介绍了硬件断点在调试中的原理、设置方法,以及与软件断点的区别,特别关注了在处理加密壳代码时硬件断点的重要性。作者以Linux64位程序为例,展示了如何在IDA中使用硬件断点进行动态分析。
最低0.47元/天 解锁文章
1934

被折叠的 条评论
为什么被折叠?



