我们即将构建的调试器应当具备两种基本的能力:打开一个可执行文件并使之以自身子进程的形式运行起来的能力,以及附加一个现有进程的能力。
建立调试会话的两种基本途径:创建一个全新的进程与附加到一个现有的执行进程。创建一个全新的进程可以在目标进程尚未有机会执行代码之时便取得全权控制。附加则意味着错过了程序初始部分的代码。
我们通常所说的CPU状态信息是对于线程而言
硬件断点的实现过程涉及控制调试寄存器中某些特定位的取值。
我们只需反置DR7寄存器中相对应的位置激活断点,此外我们还应该通过DR7设置硬件断点的类型与长度
硬件断点一旦被命中便会触发一个INT1(或称为单步事件)事件,因此我们需要在主调试结构中加入一个相应的单步事件处理例程,以便于我们的主调试循环结构调用。
某一内存区域的基地址:这块内存区域的首个内存页在虚拟内存中的起始地址
设置内存断点的本质涉及修改相关内存页的访问权限,以使其具备“保护页”的特性。当CPU试图访问这一内存区域时,一个GUARD_PAGE_EXECUTION异常事件便会被抛出。
导致非法内存操作的程序错误根源包括从缓冲区溢出到不当方式下的null指针处理以及其他类型的程序错误。
Pydbg框架有功能,名为摄取进程快照。这个特性使你可以在某一个时刻彻底冻结住目标进程,并存取这个进程在这一时刻的所有内存数据内容,然后再恢复这个进程的执行状态。