2012年12月21日 星期五 15:59
1.硬件断点
硬件断点:Dr0 - Dr3
清除硬件断点的方法:人为制造一个异常,然后修改CONTEXT中的硬件断点寄存器,这样就可以清除硬件断点了.
2.内联汇编中调用API
不能够直接call API函数名称,应该这只是一个跳,如图1
图1 调用MessageBox为例,3种方式 ①
如图2
图2 结构如图3
图3 ②声明API 如图4
图4 ③推荐的写法
如图5
图5
3.内联汇编访问结构体
如图6
图6
4.内联汇编中SIZE,LENGTH,TYPE
int iArray[8],下面是等价操作:
__asm C Size
LENGTH iArray sizeof(iArray)/Sizeof(iArray[0]) 8 SIZE iArray sizeof(iArray) 32
TYPE iArray sizeof(iArray[0]) 4 如图7
图7
5.内联汇编中的_EMIT
_EMIT相当于MASM中的db 在花指令中的应用如图8
图8 花指令的效果如图9:
图9
6.调试API相关
DebugBreak
①下断点
如果使用该函数的进程没有正在被调试的话,那么该进程通常会终止,如图10
图10 该函数实现是int 3,如图11
图11
IsDebuggerPresent
②检查该进程当前是否在调试状态 如图12
图12 运行程序看该函数实现,如图13
图13
图中那一个字节的标志就行,1表示正在被调试,2表示没有被调试(如图OD默认已经把这个标志修改为0了)
7.调试器框架
调试程序的步骤
①创建一个进程或捆绑我们的程序到运行中的进程上. API:CreateProcess ②等待调试事件 API: WaitForDebugEvent ③响应调试事件. 调试事件结构体:DEBUG_EVENT ④继续执行被调试的进程. ⑤继续这一无尽循环直到被调试进程结束
因篇幅问题不能全部显示,请点此查看更多更全内容