2012-08-27 2 views
4

ntdll.dll이 새 프로세스로 매핑 될 때와 ntdll 프로세스 초기화가 실행되기 전에 다음 명령을 사용하여 WinDBG를 중단하려고합니다.ntdll.dll이 새 프로세스로 매핑 될 때 WinDBG를 중단하는 방법

SXE LD NTDLL.DLL,

그러나, 트릭이 전혀 작동하지 않는 g,

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=7c9esp=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: 
7c9cc    int  3 

그래서, WinDBG에서 침입하는 방법 NTDLL.DLL가에 매핑되는 새로운 과정? 감사

[업데이트]

내가 정확히 jcopenha에서 언급 한 바와 같이 단계를 수행하지만, Windbg에서 이상한 오류를 제공 이유를 모르겠어요 (메모리 액세스 에러) Notepad.exe를 실행한다 .

제발 도와주세요! 고마워요!

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] 는 I 홀수 명령 7c810867 표시되지만 p 명령이 여전히 작동 할 수 알았다.

WinDBG의 버그입니까? 당신이> 이벤트 필터를 Debug-와 "활성화"를 "프로세스 만들기"를 변경할로 이동합니다

enter image description here

+0

누군가가 나를 도와 줄 수 있기를 바랍니다. 감사합니다 –

+0

물음표가 나타나는 이유는 커널 디버거를 사용하고 페이지 테이블이 그 순간에 존재하지 않기 때문입니다. 따라서 p (step over)를 실행하면 메모리 관리자가 예외를 처리하고 사용 가능한 메모리를 매핑합니다. – Shaddy

답변

5

다음 모듈 목록에 NTDLL.DLL 쇼 전에 시작됩니다 응용 프로그램을 다시 시작합니다. 그런 다음 sxe ld ntdll.dll;g을 실행하면 ntdll!RtlUserThreadStart으로 중단됩니다.

0:000> .restart /f 
CommandLine: C:\Windows\System32\notepad.exe 
Symbol search path is: SRV*d:\symbols*http://msdl.microsoft.com/download/symbols 
Executable search path is: 
ModLoad: 00000000`ffe00000 00000000`ffe35000 notepad.exe 
00000000`7790c500 4883ec48  sub  rsp,48h 
0:000> sxe ld ntdll.dll;g 
ModLoad: 00000000`778e0000 00000000`77a89000 ntdll.dll 
ntdll!RtlUserThreadStart: 
00000000`7790c500 4883ec48  sub  rsp,48h 
2

ntdll의로드에 대해서는 this을 권장합니다. 어떤 코드와 함께 실행하기 전에 공정에 침입 할 수

windbg -xe cpr notepad 

또는

windbg -xe ld:ntdll notepad 

의 ntdll 여전히이 시점에서 프로세스에 매핑됩니다 - 이러한 상황이 발생하기 전에 침입 수 없습니다.

메모리 액세스 오류는 kernel32가 아직 프로세스에로드되지 않았습니다. 초기 스레드는 kernel32! BaseProcessStartThunk에서 실행되도록 대기 중이지만 아직 kernel32가 주소 공간에로드되어 있지 않으므로 해당 주소에서 아무 것도 볼 수 없습니다.

스레드의 시작 주소가 매핑되지 않은 메모리에서 시작할 수있는 이유는 스레드가 실행을 시작하기 전에 가장 먼저 발생하는 것은 사용자 APC가 모든 스레드를 처리하는 초기 스레드의 컨텍스트에서 실행되기 때문입니다 kernel32로드를 포함하여 프로세스 초기화 당신은 스택 추적에 내부 함수 이름을 얻기 위해 기호를로드해야합니다

sxe ld kernel32 

: 당신은 당신처럼, 비슷한 이벤트를 설정하면이 이벤트가 발생 볼 수 있습니다.

첫 번째 링크 외에도 프로세스 초기화 here에 대한 자세한 내용을 볼 수 있습니다. 희망이 도움이됩니다.

+0

또한 ntdll이 모듈 목록에 나타나지 않는다고해서 프로세스에 이미 매핑되어 있지 않다는 것을 의미하지는 않습니다. ntdll은 시스템의 모든 프로세스에서 동일한 기본 주소를 가지므로 다른 프로세스에서 ntdll의 기본 주소를 가져와 디버깅 된 프로세스의 해당 주소에 메모리를 표시 할 수 있습니다. ntdll이 표시됩니다. 로드 된 모듈 목록에 나타나지 않는 이유는 모듈 목록이 PEB에서 아직 구성되지 않았기 때문입니다. 이것은 또한 초기화의 일부로 발생합니다. – user1354557

-1

ntdll이 사용자 모드로 매핑되지 않았다는 것을 기억하십시오. 사용자 모드에 의해 매핑 되었다면, ntdll을 매핑하는 모듈을 어떻게 매핑 할 것인가? ntdll은 syscall이 커널에 들어가기위한 스텁 세트를 포함하고 프로세스 초기화의 일부인 COFF 로더와 같은 몇 가지 다른 것들을 포함합니다. 그것은 약간의 마법의 dll이고 그것은 재배치 될 수 없으므로 항상 모든 프로세스의 동일한 가상 주소에 있습니다.

ntdll이 매핑되기 전에 중단하려면 커널 디버거를 사용해야합니다.

ntdll이 매핑되기 전에 위반하여 달성하고자하는 것이 있는지 물어볼 수 있습니까?

관련 문제