2. 软件断点

一般断点要满足的3个要求:

1. 运行到指定地址时可挂起程序,此时能提供环境数据给用户,并等待用户操作或命令。

2. 当用户希望继续执行时,能像正常程序一样继续执行。

3. 当再次执行到断点时,还能像步骤1一样挂起程序。

 

例如用int3sticli等指令替换原机器码,都能实现断点效果。

 

OD的断点把指定地址的机器指令替换为CC,普通单步指令停下的地址,其机器码不是CC

 

用户设置的断点保存在断点信息表中,表中保存地址和原机器码。当发生异常时比较地址是否存在于表中,存在则调试器接管断点,否则交给程序处理。

 

ntdll.dll中有一条int3指令,称为系统断点,提示我们马上要到Entry Point了,用户可以做准备工作了。

 

 

 

 

int3专用于用户和调试服务交互,进程内发生的int3异常如果未处理,程序最终会崩溃,如果附加了调试器,且调试器的处理态度是DBG_CONTINUE,则此int3指令执行完毕,继续下一条指令。

 

 

 

 

 

 

 

 

 

 

 

名称粉碎规则(编译后查看obj文件)

//_Foo1 _前缀

extern "C" int __cdecl Foo1(int a, char b) {

    return 0;

}

 

//_Foo2@8 _前缀 + @所有参数字节数

extern "C" int __stdcall Foo2(int a, char b) {

    return 0;

}

 

//@Foo3@8 @前缀 + @所有参数字节数

extern "C" int __fastcall Foo3(int a, char b) {

    return 0;

}

posted @ 2020-11-03 20:53  八转达人  阅读(294)  评论(0编辑  收藏  举报