系统断点在哪里&&如何断在TLS回调前

来源:互联网 发布:seo快速优化软件 编辑:程序博客网 时间:2024/05/17 21:45

系统断点

Windows

当你调试一个程序时,系统给了我们一次机会在被调试前。
ntdll.dll-LdrpDoDebuggerBreak()
如图:
LdrpDoDebuggerBreak()
通过一个int3断点来实现应用程序启动前将控制权传递给调试器。该函数一般被映射在0x771E1CC8,如果不存在调试器或者,启动应用的调试器不理睬这个断点,该函数自己的异常处理程序。
有些壳程序的反调试也是采用类似的手法,一旦壳程序的异常处理程序没有被调用,则表明有调试程序接管了壳程序埋伏的异常。

由ntdll将调用权交给主线程的位置-如何断在TLS回调前

我真心想分享自己调试的内容给你。但是不同系统位置不同。

win7专业版64bit系统32bit程序:

断在:0x77479ED0,即ntdll.dll(32bit)是一条call eax,可以断下所有模块加载前,包括TLS回调前和主程序前。位于___RtlUserThreadStart(x,x)

win7家庭版64bit系统32bit程序:

断在TLS前:
kernel32.dll;offset:3388

jnecall edx;在这里。push eaxcall

你可以通过用VS编写一个TLS回调程序,用VS断在该代码,通过栈回溯,找到是谁调用了该代码。

如何找到dll模块的调用关键点呢?

它在ntdll.dll(32bit)的如下位置:
DLL模块的调用点

掌握自己系统中的常用断点位置,调试时候少很多周折。

1 0
原创粉丝点击