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 을 통해서 원인이 되는 이미지 들을 추적 할 수 있습니다.

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  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.

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  커널 디버거를 통해 프로세스 개체 형식개체 살펴보기 
작성일시 : 2007.11.28 14:21 | 분류 : Windows Server/Kernel | 태그 : Debugging, object type, Type Objects, 형식 개체

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

 
해당 칼럼의 의미

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

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

이제 해더를 보도록 하자.

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

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

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  현재 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에 정의 되어 있다.

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  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/

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  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를 실행하게 된다.

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

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
 Prev   1   Next 

티스토리 툴바