Maystyle :
Admin : New post
Guestbook
Local
media
Catergories
Recent Articles
Recent Comments
Recent Trackbacks
Calendar
Tag
Archive
Link
Search
 
해당되는 게시물 6건
  행 덤프 분석하기 (Low CPU) 
작성일시 : 2007.12.06 09:15 | 분류 : Windows Server/Kernel | 태그 : Debugging, hang 덤프 분석, low cpu hang, 행 덤프 분석

먼저 Lock 상황을 확인 했습니다.

일단 해당 Lock 중 Contention Count 가 발생한 Lock 위주로 원인을 찾아 갑니다.

이렇게 발생한 lock 중에 kv에 “KeWaitForResource” 에 주목합니다.

설명 :
ExpWaitForResource(IN PERESOURCE Resource, 00602 IN PVOID Object)
The ExpWaitForResource routine performs a wait on the specified resource.
@param Resource : Pointer to the resource to wait on.
@param OwnerThread : * Pointer to object (exclusive event or shared semaphore) to wait on.

자 원인이 되는 리소스를 찾아가기 위해서 이 함수가 호출 될 당시의 변수 값을 찾아야 합니다.
해당 스레드와 프레임으로 이동합니다.

해당 함수의 변수를 확인 합니다.
하지만 보는 그림과 같이 심볼이 없어서 변수를 확인 할 수 없습니다.
변수 중 object에 해당하는 Thread 명을 확인하여 찾아가면 됩니다.

이 후… 동일한 방식으로 원인을 추적합니다.
하지만 심볼이 없기 때문에 여기서 추적을 종료합니다.
그리고 해당 함수의 data type을 확인 합니다.

Data Type 을 통해서 원인이 되는 이미지 들을 추적 할 수 있습니다.

신고
  liveKd 로 핸들 테이블을 한번 보도록 하자. 
작성일시 : 2007.11.28 19:27 | 분류 : Windows Server/Kernel | 태그 : !handle, Debugging

The !handle extension displays information about a handle or handles that one or all processes in the target system own.

신고
  커널 디버거를 통해 프로세스 개체 형식개체 살펴보기 
작성일시 : 2007.11.28 14:21 | 분류 : Windows Server/Kernel | 태그 : Debugging, object type, Type Objects, 형식 개체

먼저 !process 를 이용하여 커널 디버거에서 프로세스 개체 형식 데이터 구조체를 볼 수 있다.

 
해당 칼럼의 의미

!object의 매개 변수로 프로세스 개체 주소를 지정하여 실행한다.

개체 해더는 0x18 이후에 위치한다는 것을 볼 수 있다. (ObjectHeader: 85f93790 (old version) )

이제 해더를 보도록 하자.

해더로 부터 타입의 주소를 얻어 해당 개체 형식을 보도록 하자.

개체 형식 구조는 개체 형식 이름을 포함하고, 그 형식의 전체 활성 개체 수를 추적하며, 핸들의 최대 수와 그 형식의 개체를 추적하는 부분이 출력에서 보인다. TypeInfo 필드는 개체형식의 모든 개체들에 공통인 속성을 저장하는 데이터 구조에 대한 포인터뿐만 아니라 개체 형식의 메소드들을 저장한다.

신고
  현재 CPU의 IRQL을 살펴보자 
작성일시 : 2007.11.12 17:41 | 분류 : Windows Server/Kernel | 태그 : CPU, Debugging, IRQL, PCR

먼저 !irql 을 통해 프로세서의 IRQL 상태를 알 수있다. 위의 경우 lazy irql을 지원하지 않기 때문에 이 필드는 0이다. 아무튼 필자가 가지고 있는 덤프는 위와 같고, 여튼 간에 !pcr을 통해서 IDT에 대한 포인터 현재 실행 스레드와 앞으로 실행할 스래드의 주소를 알 수 있다.

PCR(Process Control Region) 과 PRCB(Processor Control Block)의 구조체는 DDK 의 Ntddk.h에 정의 되어 있다.

신고
  Virtual Server 및 PC 상의 Windows Server Debugging 
작성일시 : 2007.11.07 09:03 | 분류 : Windows Server/Kernel | 태그 : Debugging, virtual pc, virtual server

현재 진행 되고 있는 MSEasy 스터디를 위하여 Virtual Server를 Debuging 하는 방법을 공유합니다.

http://support.microsoft.com/kb/871171/
http://support.microsoft.com/kb/871170/

신고
  IDT 살펴 보기 
작성일시 : 2007.11.06 16:20 | 분류 : Windows Server/Kernel | 태그 : Debugging, IDT, Interrupt Dispatch Table, ISR, 인터럽트 디스패치 테이블, 인터럽트 서비스 루틴

!idt 명령을 이용하면 인터럽트 디스패치 테이블(interrupt dispatch table) 을 볼 수 있다.

83 : 255까지 지원되는 인터럽트 서비스 루틴 (ISR) 번호, 디버깅 시 bugcheck 번호
ff517e04 : 해당 인터럽트를 실행할 핸들러가 있는 메모리 위치(ISR) 이다.

(이전 포스트 IRQLException 과 Interrupt 에서 참조)
ISR 번호를 보면 crash 시 어떤 일이 있었는지 알 수 있다.
즉 버그 check 코드가 50이 발생 했다면 해당 머신은 exception 혹은 interrupt에 의해 hal!HalpApicRebootService를 실행하게 된다.

항상 말하지만 내 스스로 쓴 글은 혼자 공부하고 유추한 내용이 있을 수 있다.
주위 바란다.

신고
 Prev   1   Next 

티스토리 툴바