BP
表达式
[,
条件
]
在指定地址设置
INT3
断点
BP EAX+10BP 410010, EAX==WM_CLOSEBP Kernel32.GetProcAddress
BPX 标签 在当前模块每一个对外部标签的调用设置断点 BPX CreateFileA
BC 表达式 删除指定地址的断点 BC 410010
MR 表达式 1 [, 表达式 2] 设置指定范围的内存访问断点
MW 表达式 1 [, 表达式 2] 设置指定范围的内存写断点 Set
MD 移除内存断点
HR 表达式 设置 1 字节的硬断点,当访问该地址时中断
HW 表达式 设置 1 字节的硬断点,当写该地址时中断
HE 表达式 设置硬断点,当执行该地址时中断
HD [ 表达式 ] 移除指定地址处的硬断点
附内存中断小结:
OD中内存断点小结
内存,小结,断点
12FFC4 11 11
1. 内存访问断点 设置 12FFC4 一个字节为内存访问断点 F9 运行程序 OD 会停在 0040EE6A
原理: OD 会设置 12FFC4 地址访问权限为不可读 大小为一字节 任何试图读取该地址的操作 都会引发异常 OD 会捕获这个异常 并等待用户处理 现象就是 运行到 mov al, byte ptr [12FFC4] 当指令试图读取该地址内容 并给 AL 赋值的时候 OD 断了下来
2. 硬件访问断点 设置 12FFC4 一个字节为硬件访问断点 F9 运行程序 OD 会停在 0040EE6F
原理: OD 会设置调试寄存器 DR0-DR3 其中一个为 12FFC4 并设置 DR7 相关标记 这个实现依靠 CPU 特性 当设置了改地址为硬件访问断点后 任何试图访问该地址的操作 都会引发异常 OD 会捕获这个异常 并等待用户处理 现象就是 运行到 mov al, byte ptr [12FFC4] 当指令试图读取该地址内容 并给 AL 赋值的时候 OD 断了下来
3. 内存写入断点 设置 12FFC5 一个字节为内存写入断点 F9 运行程序 OD 会停在 0040EE75
原理: OD 会设置 12FFC5 地址访问权限为不可写 大小为一字节 任何试图写入该地址的操作 都会引发异常 OD 会捕获这个异常 并等待用户处理 现象就是 运行到 mov byte ptr [12FFC5], 11 当指令试图写入该地址内容 OD 断了下来
4. 硬件写入断点 设置 12FFC5 一个字节为硬件写入断点 F9 运行程序 OD 会停在 0040EE7C
原理: OD 会设置调试寄存器 DR0-DR3 其中一个为 12FFC5 并设置 DR7 相关标记 这个实现依靠 CPU 特性 当设置了改地址为硬件访问写入后 任何试图写入该地址的操作 都会引发异常 OD 会捕获这个异常 并等待用户处理 现象就是 运行到 mov byte ptr [12FFC5], 11 当指令试图写入该地址的时候 OD 断了下来
至于内存断点断在当前指令 硬件断点断在当前指令的下一条 取决于 OD 的实现
BPX 标签 在当前模块每一个对外部标签的调用设置断点 BPX CreateFileA
BC 表达式 删除指定地址的断点 BC 410010
MR 表达式 1 [, 表达式 2] 设置指定范围的内存访问断点
MW 表达式 1 [, 表达式 2] 设置指定范围的内存写断点 Set
MD 移除内存断点
HR 表达式 设置 1 字节的硬断点,当访问该地址时中断
HW 表达式 设置 1 字节的硬断点,当写该地址时中断
HE 表达式 设置硬断点,当执行该地址时中断
HD [ 表达式 ] 移除指定地址处的硬断点
附内存中断小结:
OD中内存断点小结
内存,小结,断点
0040EE67 90 nop //假设此处为EIP
0040EE68 90 nop
0040EE69 90 nop
0040EE6A A0 C4FF1200 mov al, byte ptr [12FFC4]
0040EE6F 90 nop
0040EE70 > 90 nop
0040EE71 90 nop
0040EE72 90 nop
0040EE73 90 nop
0040EE74 90 nop
0040EE75 C605 C5FF1200 11 mov byte ptr [12FFC5], 11
0040EE7C 90 nop
0040EE7D 90 nop
0040EE7E 90
12FFC4 11 11
1. 内存访问断点 设置 12FFC4 一个字节为内存访问断点 F9 运行程序 OD 会停在 0040EE6A
原理: OD 会设置 12FFC4 地址访问权限为不可读 大小为一字节 任何试图读取该地址的操作 都会引发异常 OD 会捕获这个异常 并等待用户处理 现象就是 运行到 mov al, byte ptr [12FFC4] 当指令试图读取该地址内容 并给 AL 赋值的时候 OD 断了下来
2. 硬件访问断点 设置 12FFC4 一个字节为硬件访问断点 F9 运行程序 OD 会停在 0040EE6F
原理: OD 会设置调试寄存器 DR0-DR3 其中一个为 12FFC4 并设置 DR7 相关标记 这个实现依靠 CPU 特性 当设置了改地址为硬件访问断点后 任何试图访问该地址的操作 都会引发异常 OD 会捕获这个异常 并等待用户处理 现象就是 运行到 mov al, byte ptr [12FFC4] 当指令试图读取该地址内容 并给 AL 赋值的时候 OD 断了下来
3. 内存写入断点 设置 12FFC5 一个字节为内存写入断点 F9 运行程序 OD 会停在 0040EE75
原理: OD 会设置 12FFC5 地址访问权限为不可写 大小为一字节 任何试图写入该地址的操作 都会引发异常 OD 会捕获这个异常 并等待用户处理 现象就是 运行到 mov byte ptr [12FFC5], 11 当指令试图写入该地址内容 OD 断了下来
4. 硬件写入断点 设置 12FFC5 一个字节为硬件写入断点 F9 运行程序 OD 会停在 0040EE7C
原理: OD 会设置调试寄存器 DR0-DR3 其中一个为 12FFC5 并设置 DR7 相关标记 这个实现依靠 CPU 特性 当设置了改地址为硬件访问写入后 任何试图写入该地址的操作 都会引发异常 OD 会捕获这个异常 并等待用户处理 现象就是 运行到 mov byte ptr [12FFC5], 11 当指令试图写入该地址的时候 OD 断了下来
至于内存断点断在当前指令 硬件断点断在当前指令的下一条 取决于 OD 的实现