벌레 의 정취:0 으로 인 한 붕괴 제거
내 핵 이 취약 한 이 유 는 자신 을 잘 격 리 할 방법 이 없 기 때문이다.그것 은 하나의 큰 전체 로 영 광 스 럽 고 손상 되 는 큰 전체 에 속한다.그것 은 모든 것 을 순서대로 집행 해 야 한다.그렇지 않 으 면 한 구석 에 있 는 나비 가 날 개 를 흔 들 면 태평양 에 큰 폭풍 을 불 러 올 수 있다.지금 보 이 는 것 은 커 널 에서 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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
nil 및 null 및 NSNull 차이점 및 관련 질문1. nil과 null은 글자의 뜻에서 쉽게 이해할 수 있다. 그러나 Objective-c에서 NSArray와 같은 유형에 대해 nil이나 NULLL은 그 중의 Object로 할 수 없다. 만약에 NSArray를 정...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.