Ich möchte einen Debugger an einen anderen Prozess anhängen, aber ich muss den Debugger anhängen, ohne einen neuen Thread zu erstellen. Wenn ein Debugger an einen Prozess angehängt wird, erstellt er normalerweise einen neuen Thread innerhalb des Zielprozesses und führt eine Routine namens ntdll!DbgBreakPoint
innerhalb des erstellten Threads aus.Debugger an einen Prozess anhängen, ohne einen neuen Thread zu erstellen
Diese Routine führt die int3
Anweisung, die der Debugger die Kontrolle über die Ausführung nehmen können so, wenn der Debugger anspringt, ist dies, wie der Call-Stack wie rechts schaut nach den Debugger Befestigung:
ntdll!DbgBreakPoint
ntdll!DbgUiRemoteBreakin+0x39
KERNEL32!BaseThreadInitThunk+0x24
ntdll!__RtlUserThreadStart+0x2f
ntdll!_RtlUserThreadStart+0x1b
Der Grund Warum muss ich einen Debugger unter diesen Einschränkungen anfügen, weil ich die Erstellung neuer Threads in Ntdll debuggen und Debuggen muss, nachdem Threads bereits erstellt wurden, macht keinen Sinn.
Da ich die Kontrolle über das Zielprogramm habe, kann ich den Programmzähler des Hauptthreads auf den von mir gewünschten Wert setzen, und deshalb kann ich die erste ausgeführte Anweisung irgendwo im Code setzen, aber ich kann das nicht fangen Ausnahme, weil wenn ich einen Debugger angehängt habe, sind bereits Threads erstellt und ich komme auf das gleiche Problem zurück.
Ich habe bereits versucht, mein Problem mit seltsamen WinDbg/ollydbg/x64dbg Einstellungen zu beheben, aber ich konnte es nicht funktionieren. Also zu meinem Punkt, gibt es eine Debugger/Debugging-Methode, die mir erlauben, an einen Remote-Prozess anhängen, ohne einen Remote-Thread zu erstellen und meine int 3
fangen?
Hilfe wird geschätzt!
ja, gibt es :) absolut nicht brauchen, erstellen neue Thread auf Anhang – RbMm
@RbMm, Hallo, können Sie bitte erarbeiten? – Aviv
für Start Debug bereits laufenden Prozess - alles, was wir brauchen - ZwDebugActiveProcess API aufrufen, Remote-Thread in Debugee (DbgUiRemoteBreakin) absolut nicht brauchen, ich weiß nicht, aus welchem Grund dies getan. Ich habe einen eigenen geschriebenen Debugger, einer ist der beste von allen existierenden. aber das ist nur meine in diesem Moment – RbMm