에피소드
조각 모음 도구 #167 - 사용자 모드 크래시 덤프 Redux 디버깅
조각 모음 도구의이 에피소드에서, 앤드류 리차즈와 채드 비더는 Windows에 대한 디버깅 도구를 사용 (WinDbg) 앤드류의 컴퓨터에서 발생한 다양한 응용 프로그램 충돌의 근본 원인을 확인합니다. Sysinternals ProcDump를 사용하여 덤프를 캡처합니다.
디버깅하는 동안 Windows 탐색기에서 압축 및 암호화된 파일의 색을 구성하고 Sysinternals 프로세스 모니터를 사용하여 PDE 디버거 확장을 로드할 때 디버거가 액세스 거부된 이유를 확인합니다.
우리는 이 두 에피소드에서 비슷한 조사를 했습니다.
이 에피소드에서는 Windows용 디버깅 도구를 설치하는 방법을 다룹니다.
에서 Sysinternals 도구를 http://www.sysinternals.com가져옵니다. 다음을 사용합니다.
Defrag Tools OneDrive에서 PDE 디버거 확장 가져오기
Microsoft 공용 기호 서버에 대한 기호 경로를 가져옵니다.
- 환경 변수를 통해
setx /m _NT_SYMBOL_PATH SRV*C:\My\Sym*https://msdl.microsoft.com/download/symbols - 디버거에서
.sympath SRV*C:\My\Sym*https://msdl.microsoft.com/download/symbols
자신의 컴퓨터에서 크래시 덤프를 수집하려면 ProcDump를 Postmortem(AeDebugger) 디버거로 설치합니다.
md c:\dumps
procdump.exe -ma -i c:\dumps
모든 덤프(사용자 또는 커널)에서 자동화된 분석을 실행하여 문제를 볼 수 있습니다.
!analyze -v
치트 시트 디버깅
- c0000005는 액세스 위반입니다. .ecxr & k 사용
- c000027b는 보관된 예외(스토어 앱) - !pde.dse 사용
- e0434352는 CLR 예외입니다. !sos.pe
- e0697282는 C++ 예외입니다. .ecxr & k 사용
- 80000003 중단점입니다. !analyze -v 사용
- 10진수를 입력할 때 접두사로 "0n"을 입력합니다.
- 16진수를 입력할 때 접두사를 "0x"(기본 접두사)로 지정합니다.
일반 디버거 명령
.exr -1
- 예외 코드 및 예외 매개 변수 보기
- C0xxxxxx 및 80xxxxxx처럼 보이는 숫자는 HRESULT(오류 코드)입니다.
- 7FFFxxxxxxxx처럼 보이는 숫자는 일반적으로 코드(어셈블러) 주소입니다.
!주소
- 주소 정보 표시 - 커밋됨/예약/무료, 이미지/매핑/비공개
- 숫자가 코드인지 데이터인지 확인하는 데 사용됩니다.
ln (1)
- 가장 가까운 주소 나열
- 주소 또는 그 근처에 기호를 표시합니다.
- 숫자가 코드인지 데이터인지 확인하는 데 사용됩니다.
.ecxr
- 디버깅 컨텍스트를 Windows 오류 보고 컨텍스트가 아닌 예외 지점으로 변경합니다.
r
- 현재 컨텍스트에서 레지스터를 봅니다. (.ecxr는 동일한 출력을 생성합니다.)
k
- 호출 스택 보기
lmvm
- 마스크를 사용하여 로드된 모듈 보기
- 폴더, 타임스탬프, 설명, 저작권, 제품/파일 버전을 비롯한 모듈의 세부 정보 보기
| (세로 막대 또는 파이프 문자)
- 실행 파일의 경로 보기(예: c:\windows\notepad.exe)
!ext.error
- 오류 코드에 대한 설명을 가져옵니다. 시스템 오류 코드를 설명하는 데 가장 적합합니다.
!pde.err
- 오류 코드에 대한 설명을 가져옵니다. HRESULTs(80xxxxxx 및 C0xxxxxx)를 설명하는 데 능숙합니다.
!pde.dpx
- 증명 정보(기호, 구조체, 문자열 등)를 위해 현재 스레드를 긁어냅니다.
.형식
- 숫자를 다양한 형식으로 표시합니다.
- 숫자가 실제로 ASCII 텍스트이거나 날짜/시간인 경우 쉽게 운동할 수 있습니다.
!sos.pe
- CLR 예외를 표시합니다.
- 내부 예외가 있는 경우 링크를 클릭하여 확인합니다.
.cordll -u & .cordll -l
- SOS가 로드되지 않은 경우 CLR 지원의 언로드 및 로드를 수행합니다.
!peb
- 프로세스 환경 블록 보기(모듈, 명령줄, 환경 변수 등)
!teb
- 현재 스레드의 환경 블록 보기(스택 범위, 마지막 오류 코드, 마지막 상태 코드 등)
!gle
- 마지막 오류 가져오기
- 현재 스레드의 마지막 오류 코드 및 마지막 상태 코드 표시
.cls
- 화면을 지웁다.
.새로고침
- 현재 스택에서 모듈에 대한 기호를 다시 로드(다운로드)합니다.
.reload /f
- 현재 스택의 모듈에 대한 기호의 전체 다시 로드(다운로드)를 강제로 적용합니다.
애플리케이션 저장
현재 설치된 스토어 애플리케이션 및 해당 버전을 보려면 다음을 사용합니다.
레지스트리 편집기(regedit.exe)
- HKEY_CURRENT_USER\SOFTWARE\Classes\ActivatableClasses\Package
PowerShell
조각 모음 도구의이 에피소드에서, 앤드류 리차즈와 채드 비더는 Windows에 대한 디버깅 도구를 사용 (WinDbg) 앤드류의 컴퓨터에서 발생한 다양한 응용 프로그램 충돌의 근본 원인을 확인합니다. Sysinternals ProcDump를 사용하여 덤프를 캡처합니다.
디버깅하는 동안 Windows 탐색기에서 압축 및 암호화된 파일의 색을 구성하고 Sysinternals 프로세스 모니터를 사용하여 PDE 디버거 확장을 로드할 때 디버거가 액세스 거부된 이유를 확인합니다.
우리는 이 두 에피소드에서 비슷한 조사를 했습니다.
이 에피소드에서는 Windows용 디버깅 도구를 설치하는 방법을 다룹니다.
에서 Sysinternals 도구를 http://www.sysinternals.com가져옵니다. 다음을 사용합니다.
Defrag Tools OneDrive에서 PDE 디버거 확장 가져오기
Microsoft 공용 기호 서버에 대한 기호 경로를 가져옵니다.
- 환경 변수를 통해
setx /m _NT_SYMBOL_PATH SRV*C:\My\Sym*https://msdl.microsoft.com/download/symbols - 디버거에서
.sympath SRV*C:\My\Sym*https://msdl.microsoft.com/download/symbols
자신의 컴퓨터에서 크래시 덤프를 수집하려면 ProcDump를 Postmortem(AeDebugger) 디버거로 설치합니다.
md c:\dumps
procdump.exe -ma -i c:\dumps
모든 덤프(사용자 또는 커널)에서 자동화된 분석을 실행하여 문제를 볼 수 있습니다.
!analyze -v
치트 시트 디버깅
- c0000005는 액세스 위반입니다. .ecxr & k 사용
- c000027b는 보관된 예외(스토어 앱) - !pde.dse 사용
- e0434352는 CLR 예외입니다. !sos.pe
- e0697282는 C++ 예외입니다. .ecxr & k 사용
- 80000003 중단점입니다. !analyze -v 사용
- 10진수를 입력할 때 접두사로 "0n"을 입력합니다.
- 16진수를 입력할 때 접두사를 "0x"(기본 접두사)로 지정합니다.
일반 디버거 명령
.exr -1
- 예외 코드 및 예외 매개 변수 보기
- C0xxxxxx 및 80xxxxxx처럼 보이는 숫자는 HRESULT(오류 코드)입니다.
- 7FFFxxxxxxxx처럼 보이는 숫자는 일반적으로 코드(어셈블러) 주소입니다.
!주소
- 주소 정보 표시 - 커밋됨/예약/무료, 이미지/매핑/비공개
- 숫자가 코드인지 데이터인지 확인하는 데 사용됩니다.
ln (1)
- 가장 가까운 주소 나열
- 주소 또는 그 근처에 기호를 표시합니다.
- 숫자가 코드인지 데이터인지 확인하는 데 사용됩니다.
.ecxr
- 디버깅 컨텍스트를 Windows 오류 보고 컨텍스트가 아닌 예외 지점으로 변경합니다.
r
- 현재 컨텍스트에서 레지스터를 봅니다. (.ecxr는 동일한 출력을 생성합니다.)
k
- 호출 스택 보기
lmvm
- 마스크를 사용하여 로드된 모듈 보기
- 폴더, 타임스탬프, 설명, 저작권, 제품/파일 버전을 비롯한 모듈의 세부 정보 보기
| (세로 막대 또는 파이프 문자)
- 실행 파일의 경로 보기(예: c:\windows\notepad.exe)
!ext.error
- 오류 코드에 대한 설명을 가져옵니다. 시스템 오류 코드를 설명하는 데 가장 적합합니다.
!pde.err
- 오류 코드에 대한 설명을 가져옵니다. HRESULTs(80xxxxxx 및 C0xxxxxx)를 설명하는 데 능숙합니다.
!pde.dpx
- 증명 정보(기호, 구조체, 문자열 등)를 위해 현재 스레드를 긁어냅니다.
.형식
- 숫자를 다양한 형식으로 표시합니다.
- 숫자가 실제로 ASCII 텍스트이거나 날짜/시간인 경우 쉽게 운동할 수 있습니다.
!sos.pe
- CLR 예외를 표시합니다.
- 내부 예외가 있는 경우 링크를 클릭하여 확인합니다.
.cordll -u & .cordll -l
- SOS가 로드되지 않은 경우 CLR 지원의 언로드 및 로드를 수행합니다.
!peb
- 프로세스 환경 블록 보기(모듈, 명령줄, 환경 변수 등)
!teb
- 현재 스레드의 환경 블록 보기(스택 범위, 마지막 오류 코드, 마지막 상태 코드 등)
!gle
- 마지막 오류 가져오기
- 현재 스레드의 마지막 오류 코드 및 마지막 상태 코드 표시
.cls
- 화면을 지웁다.
.새로고침
- 현재 스택에서 모듈에 대한 기호를 다시 로드(다운로드)합니다.
.reload /f
- 현재 스택의 모듈에 대한 기호의 전체 다시 로드(다운로드)를 강제로 적용합니다.
애플리케이션 저장
현재 설치된 스토어 애플리케이션 및 해당 버전을 보려면 다음을 사용합니다.
레지스트리 편집기(regedit.exe)
- HKEY_CURRENT_USER\SOFTWARE\Classes\ActivatableClasses\Package
PowerShell
의견이 있으신가요? 여기에서 문제를 제출합니다.