C 将调试器附加到进程而不创建新线程

C 将调试器附加到进程而不创建新线程,c,multithreading,debugging,winapi,reverse-engineering,C,Multithreading,Debugging,Winapi,Reverse Engineering,我想将调试器附加到另一个进程,但我需要附加调试器而不创建新线程。通常,当调试器附加到进程时,它会在目标进程内创建一个新线程,并执行一个名为ntdll!DbgBreakPoint在创建的线程中 此例程执行int3指令,该指令允许调试器控制执行,因此当调试器启动时,连接调试器后调用堆栈的外观如下所示: ntdll!DbgBreakPoint ntdll!DbgUiRemoteBreakin+0x39 KERNEL32!BaseThreadInitThunk+0x24 ntdll!__RtlUserT

我想将调试器附加到另一个进程,但我需要附加调试器而不创建新线程。通常,当调试器附加到进程时,它会在目标进程内创建一个新线程,并执行一个名为
ntdll!DbgBreakPoint
在创建的线程中

此例程执行
int3
指令,该指令允许调试器控制执行,因此当调试器启动时,连接调试器后调用堆栈的外观如下所示:

ntdll!DbgBreakPoint
ntdll!DbgUiRemoteBreakin+0x39
KERNEL32!BaseThreadInitThunk+0x24
ntdll!__RtlUserThreadStart+0x2f
ntdll!_RtlUserThreadStart+0x1b
我之所以需要在这些限制下附加调试器,是因为我需要调试ntdll中新线程的创建,而在已经创建线程之后进行调试是没有任何意义的

因为我控制了目标项目,我可以将主线程的上下文的程序计数器设置为我想要的任何值,因此我可以将第一条执行的指令设置为代码中的某个地方的
int 3
,但我无法捕获异常,因为当我附加一个调试器时,已经创建了线程,我又回到了相同的问题

我已经尝试使用奇怪的WinDbg/ollydbg/x64dbg设置来解决我的问题,但我无法让它工作。那么,在我看来,是否有任何调试器/调试方法可以允许我附加到远程进程,而无需创建远程线程并捕获我的
int3


谢谢你的帮助

刚刚找到解决方案

WinDbg中有一个称为“非侵入性调试”的选项。使用此选项,调试器将不会尝试在目标进程内创建新线程

要启用它,当附加到新进程时,只需选中此框:

你可以走了

感谢RbMm澄清了这个问题

--编辑--


此解决方案允许您查看代码和寄存器,但它不会破坏
int 3
指令上的调试器,因此它不是一个好的解决方案。

刚刚找到解决方案

WinDbg中有一个称为“非侵入性调试”的选项。使用此选项,调试器将不会尝试在目标进程内创建新线程

要启用它,当附加到新进程时,只需选中此框:

你可以走了

感谢RbMm澄清了这个问题

--编辑--


此解决方案确实允许您查看代码和寄存器,但它不会破坏
int 3
指令上的调试器,因此它不是一个好的解决方案。

是,存在:)绝对不需要在上创建新线程attach@RbMm你好您能详细说明一下吗?DbgEng.dll调用NtDebugActiveProcess后调用DbGuiIssuerRemoteBreakin,其中创建远程线程-DbgUiRemoteBreakin。在这种情况下,您可以nop(在开始时插入ret)此函数。在我自己的调试器中,我不调用它。我很困惑,如果您希望在应用程序开始创建线程之前附加调试器,为什么不直接从调试器启动进程?是的,存在:)绝对不需要在上创建新线程attach@RbMm你好您能详细说明一下吗?DbgEng.dll调用NtDebugActiveProcess后调用DbGuiIssuerRemoteBreakin,其中创建远程线程-DbgUiRemoteBreakin。在这种情况下,您可以nop(在开始时插入ret)此函数。在我自己的调试器中,我不调用itI。我很困惑,如果您希望在应用程序开始创建线程之前附加调试器,为什么不直接从调试器启动进程?但这是真正的调试吗?“可以检查进程,但不会接收调试事件”-我在self-Debugger9Attach中也有此选项,但没有调试和挂起!)您发现的不是调试,您的解决方案是您的解决方案在
int 3
上中断?不理解您的问题。我的调试器是否在int 3上中断?是的。是否捕捉到调试异常?但这是真正的调试吗?“可以检查进程,但不会接收调试事件”-我在self-Debugger9Attach中也有此选项,但没有调试和挂起!)您发现的不是调试,您的解决方案是您的解决方案在
int 3
上中断?不理解您的问题。我的调试器是否在int 3上中断?是的。是否捕获调试异常?