Wie zu brechen in WinDBG, wenn ntdll.dll zugeordnet ist, in den neuen Prozess
Möchte ich mit dem folgenden Befehl brechen Sie in WinDBG bei ntdll.dll zugeordnet ist, in den neuen Prozess, und vor der ntdll, Prozess-Initialisierung läuft.
sxe ld ntdll.dll ;g
Jedoch, der trick funktioniert nicht bei allen,
ModLoad: 7c900000 7c9b0000 ntdll.dll
eax=010043af ebx=7ffde000 ecx=020f18f5 edx=00000034 esi=00c2f720 edi=00c2f6f2
eip=7c810867 esp=0006fffc ebp=00000720 iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000200
7c810867 ?? ???
Processing initial command 'sxe ld ntdll.dll ;g'
0:000> sxe ld ntdll.dll ;g
(ae8.6f4): Break instruction exception - code 80000003 (first chance)
eax=00181eb4 ebx=7ffde000 ecx=00000001 edx=00000002 esi=00181f48 edi=00181eb4
eip=7c901230 esp=0006fb20 ebp=0006fc94 iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202
ntdll!DbgBreakPoint:
7c901230 cc int 3
So, Wie Sie zu brechen Sie in WinDBG bei ntdll.dll zugeordnet ist, in den neuen Prozess?
Dank
[UPDATE]
Ich genau die Schritte wie erwähnt von jcopenha, aber ich weiß nicht, warum Windbg gibt eine seltsame Fehlermeldung(Memory access Fehler) wo Notepad.exe ausgeführt wird .
Bitte geben Sie mir eine hand!Vielen Dank!
0:000> .restart /f
CommandLine: C:\WINDOWS\NOTEPAD.EXE
Symbol search path is: D:\Symbols\Symbols;SRV*D:\Symbols\MySymbols*http://msdl.microsoft.com/download/symbols
Executable search path is:
ModLoad: 01000000 01014000 notepad.exe
eax=0100739d ebx=7ffd9000 ecx=020f18f5 edx=0000004e esi=00f7f73a edi=00f7f6f2
eip=7c810867 esp=0007fffc ebp=0000024c iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000200
7c810867 ?? ???
0:000> u 7c810867
7c810867 ?? ???
^ Memory access error in 'u 7c810867'
[UPDATE2]
Fand ich eine seltsame Anweisung angezeigt 7c810867, aber p-Befehl noch arbeiten können.
Ist es ein bug in WinDBG?
- Hoffe jemand kann mir eine hand! Dank
- Der Grund, warum die Fragezeichen angezeigt werden ist, dass Sie einen kernel-debugger, und die Seite, die Tabellen sind nicht vorhanden in diesem moment. Also, wenn Sie Sie ausführen p (Schritt über) die Ausnahme behandelt wird, die von der Speicher-Manager und ordnet den Speicher verfügbar sein (das ist, warum Sie es sehen).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie gehen, um Debug->Event-Filter und ändern Sie die "Prozess Erstellen" auf "enabled", dann die Anwendung neu starten, wird es beginnen, bevor ntdll.dll zeigt sich in der Modul-Liste. Wenn Sie dann tun
sxe ld ntdll.dll;g
es halt inntdll!RtlUserThreadStart
.Bezug auf das laden von ntdll, ich empfehle die Lektüre diese. Sie können brechen Sie in den Prozess, bevor irgendein code ausgeführt wird, mit:
Oder
ntdll wird noch zugeordnet werden, in den Prozess an dieser Stelle-Sie können nicht brechen, bevor dies geschieht.
Als für den Speicherzugriff Fehler, kernel32 nicht geladen ist, in den Prozess noch. Der ursprüngliche thread ist in der Warteschlange ausgeführt im kernel32!BaseProcessStartThunk, aber da kernel32 geladen ist nicht in den Adressraum ein, doch, Sie nicht gehen, um zu sehen, irgendetwas an dieser Adresse.
Den Grund der thread-Startadresse ist in der Lage, zu beginnen, in der nicht zugeordnete Speicher ist da, bevor der thread die Ausführung beginnt, die erste Sache, die geschieht, ist eine Benutzer-APC läuft im Kontext des ersten Fadens, der sich von allen Prozess-Initialisierung, einschließlich Verladung kernel32. Sie kann dieses Ereignis auftreten, wenn Sie eine ähnliche Veranstaltung, wie:
Werden Sie brauchen, um zu laden Symbole, um die internen Funktionen von Namen in der Stapel-Ablaufverfolgung.
Zusätzlich zu dem ersten link, Sie können mehr über die Prozess-Initialisierung hier. Hoffe, das hilft.
Soweit ich mich erinnere ntdll ist nicht abgebildet in den user-Modus. Wenn es zugeordnet ist, in vom Benutzer-Modus, was würde die Karte das Modul, dass die Karten ntdll? ntdll enthält eine Reihe von stubs für syscalls, um in den kernel und enthält auch ein paar andere Dinge, wie eine COFF-loader ist Teil der Prozess-Initialisierung. Es ist ein bisschen eine Magische dll und es nicht verschoben werden kann, so ist immer an der gleichen virtuellen Adresse in jedem Prozess.
Wenn Sie möchten, zu brechen, bevor ntdll zugeordnet ist, fürchte ich, müssen Sie einen kernel-debugger verwenden.
Darf ich Fragen, was Sie versuchen zu erreichen, indem Sie brechen, bevor ntdll abgebildet?