벌레 의 정취:0 으로 인 한 붕괴 제거

4161 단어 Crashwindbg
[저자:장 페][원문: http://www.yiiyee.cn/Blog/0x7f-1/】
내 핵 이 취약 한 이 유 는 자신 을 잘 격 리 할 방법 이 없 기 때문이다.그것 은 하나의 큰 전체 로 영 광 스 럽 고 손상 되 는 큰 전체 에 속한다.그것 은 모든 것 을 순서대로 집행 해 야 한다.그렇지 않 으 면 한 구석 에 있 는 나비 가 날 개 를 흔 들 면 태평양 에 큰 폭풍 을 불 러 올 수 있다.지금 보 이 는 것 은 커 널 에서 0 오 류 를 제거 하 는 것 이다.사용자 프로그램의 제로 제거 로 인해 프로 세 스 가 붕괴 되 고 커 널 에 서 는 시스템 이 붕 괴 됩 니 다.
int AlwaysDivide (int par0)
{
Return random (100)/par0;
}

위의 이 무의미 한 함수 코드 는 매우 신중 하지 못 하 게 썼 다.인자 par 0 을 0 으로 입력 하면 프로그램 이 무 너 집 니 다.Windbg 의 자동 분석 명령 은 이 유형의 오 류 를 잘 감지 할 수 있 습 니 다.
0: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

UNEXPECTED_KERNEL_MODE_TRAP (7f)
This means a trap occurred in kernel mode, and it's a trap of a kind
that the kernel isn't allowed to have/catch (bound trap) or that
is always instant death (double fault).  The first number in the
bugcheck params is the number of the trap (8 = double fault, etc)
Consult an Intel x86 family manual to learn more about what these
traps are. Here is a *portion* of those codes:
If kv shows a taskGate
        use .tss on the part before the colon, then kv.
Else if kv shows a trapframe
        use .trap on that value
Else
        .trap on the appropriate frame will show where the trap was taken
        (on x86, this will be the ebp that goes with the procedure KiTrap)
Endif
kb will then show the corrected stack.
Arguments:
Arg1: 00000000, EXCEPTION_DIVIDED_BY_ZERO
Arg2: 00000000
Arg3: 00000000
Arg4: 00000000

Debugging Details:
------------------

BUGCHECK_STR:  0x7f_0

TRAP_FRAME:  8969b7e0 -- (.trap 0xffffffff8969b7e0)
ErrCode = 00000000
eax=0000000a ebx=982834fc ecx=00000000 edx=00000000 esi=8991d698 edi=00000000
eip=a780dcb3 esp=8969b854 ebp=8969b874 iopl=0         nv up ei pl zr na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010246

a780dcb3 f7f9 idiv eax,ecx
Resetting default scope

DEFAULT_BUCKET_ID:  WIN7_DRIVER_FAULT

PROCESS_NAME:  svchost.exe

CURRENT_IRQL:  2

LAST_CONTROL_TRANSFER:  from 82efdd53 to 82e99768

위 에서 자동 으로 문 자 를 분석 한 결과 빨간색 글씨 체 는 오류 유형 이 0 오류 제거 라 는 것 을 눈 에 띄 게 지적 했다.EXCEPTIONDIVIDED_BY_ZERO。
이상 이 발생 했 을 때 명령 은 idiv eax,ecx 입 니 다.이때 ecx 의 값 은 0 입 니 다.전형 적 인 제로 이상 제 거 를 구성 했다.이 BSOD 의 설명 자 는 UNEXPECTED 입 니 다.KERNEL_MODE_TRAP。이상 이 발생 했 을 때 시스템 은 이상 유형 에 따라 이상 처리 함 수 를 호출 합 니 다.0 이상 을 제외 한 이상 번 호 는 0:
0: kd> !idt 0

Dumping IDT: 80b95400
00: 82e5d670 nt!KiTrap00

이 이상 은 복구 할 수 없 기 때문에 이상 처리 함 수 는 결국 KeBug Check 2 함 수 를 호출 하여 시스템 을 붕괴 시 킵 니 다.
STACK_TEXT:
8969b3ac 82efdd53 00000003 a93950d9 00000065 nt!RtlpBreakWithStatusInstruction
8969b3fc 82efe851 00000003 a780dcb3 8991d698 nt!KiBugCheckDebugBreak+0x1c
8969b7c0 82e5d6fb 0000007f 00000000 00000000 nt!KeBugCheck2+0x68b
8969b7c0 a780dcb3 0000007f 00000000 00000000 nt!KiTrap00+0x8b

좋은 웹페이지 즐겨찾기