From: Dāvis Mosāns davispuh@gmail.com
x64dbg (TitanEngine) expects that system breakpoint is first breakpoint that will be triggered. Before this patch that wasn't the case causing user breakpoint (eg. in some DLL) to be swallowed instead. --- dlls/ntdll/loader.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index 4fc8af2662e..48e017f6034 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -4340,6 +4340,9 @@ void loader_init( CONTEXT *context, void **entry ) NtTerminateProcess( GetCurrentProcess(), status ); }
+ NtQueryInformationProcess( GetCurrentProcess(), ProcessDebugPort, &port, sizeof(port), NULL ); + if (port) process_breakpoint(); + if ((status = walk_node_dependencies( wm->ldr.DdagNode, context, process_attach ))) { if (last_failed_modref) @@ -4352,9 +4355,6 @@ void loader_init( CONTEXT *context, void **entry ) release_address_space(); if (wm->ldr.TlsIndex == -1) call_tls_callbacks( wm->ldr.DllBase, DLL_PROCESS_ATTACH ); if (wm->ldr.ActivationContext) RtlDeactivateActivationContext( 0, cookie ); - - NtQueryInformationProcess( GetCurrentProcess(), ProcessDebugPort, &port, sizeof(port), NULL ); - if (port) process_breakpoint(); } else {