2009-08-04 5 views
0

저는 Delphi 2009로 변환 한 응용 프로그램을 가지고 있습니다. "문자열 형식 검사"가 있고 표준 메모리 관리자가 있습니다. http://www.microsoft.com/whdc/devtools/debugging/install64bit.mspx에 MS 디버깅 도구를 다운로드하고 디버그 파일을 얻었지만 무엇을 만들지 잘 모르겠습니다. 나는 여기에서 어디로 가야할지에 대한 몇 가지 조언을 원한다. 아래는 디버그 파일의 맨 위 부분입니다 (맨 아래에 모든 드라이버가로드되어 있습니다).Vista 64 비트 BSOD, Delphi 2009 애플리케이션 실행시

 
Opened log file 'c:\debuglog.txt' 
1: kd> .sympath srv*c:\symbols*http://msdl.microsoft.com/downloads/symbols 
Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/downloads/symbols 
Expanded Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/downloads/symbols 
1: kd> .reload;!analyze -v;r;kv;lmnt;.logclose;q 
Loading Kernel Symbols 
............................................................... 
................................................................ 
......................... 
Loading User Symbols 
Loading unloaded module list 
........ 
******************************************************************************* 
*                    * 
*      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: 0000000000000008, EXCEPTION_DOUBLE_FAULT 
Arg2: 0000000080050033 
Arg3: 00000000000006f8 
Arg4: fffff80001ee1678 

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


BUGCHECK_STR: 0x7f_8 

CUSTOMER_CRASH_COUNT: 4 

DEFAULT_BUCKET_ID: COMMON_SYSTEM_FAULT 

PROCESS_NAME: SomeApplication.e 

CURRENT_IRQL: 1 

EXCEPTION_RECORD: fffffa60087b43c8 -- (.exr 0xfffffa60087b43c8) 
.exr 0xfffffa60087b43c8 
ExceptionAddress: fffff80001ed0150 (nt!RtlVirtualUnwind+0x0000000000000250) 
    ExceptionCode: 10000004 
    ExceptionFlags: 00000000 
NumberParameters: 2 
    Parameter[0]: 0000000000000000 
    Parameter[1]: 00000000000000d8 

TRAP_FRAME: fffffa60087b4470 -- (.trap 0xfffffa60087b4470) 
.trap 0xfffffa60087b4470 
NOTE: The trap frame does not contain all registers. 
Some register values may be zeroed or incorrect. 
rax=0000000000000050 rbx=0000000000000000 rcx=0000000000000004 
rdx=00000000000000d8 rsi=0000000000000000 rdi=0000000000000000 
rip=fffff80001ed0150 rsp=fffffa60087b4600 rbp=fffffa60087b4840 
r8=0000000000000006 r9=fffff80001e4e000 r10=ffffffffffffff88 
r11=fffff8000204c000 r12=0000000000000000 r13=0000000000000000 
r14=0000000000000000 r15=0000000000000000 
iopl=0   nv up ei pl zr na po nc 
nt!RtlVirtualUnwind+0x250: 
fffff800`01ed0150 488b02   mov  rax,qword ptr [rdx] ds:00000000`000000d8=???????????????? 
.trap 
Resetting default scope 

LAST_CONTROL_TRANSFER: from fffff80001ea81ee to fffff80001ea8450 

STACK_TEXT: 
fffffa60`005f1a68 fffff800`01ea81ee : 00000000`0000007f 00000000`00000008 00000000`80050033 00000000`000006f8 : nt!KeBugCheckEx 
fffffa60`005f1a70 fffff800`01ea6a38 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiBugCheckDispatch+0x6e 
fffffa60`005f1bb0 fffff800`01ee1678 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiDoubleFaultAbort+0xb8 
fffffa60`087b3c90 fffff800`01ea82a9 : fffffa60`087b43c8 00000000`00000001 fffffa60`087b4470 00000000`0000023b : nt!KiDispatchException+0x34 
fffffa60`087b4290 fffff800`01ea70a5 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000001 : nt!KiExceptionDispatch+0xa9 
fffffa60`087b4470 fffff800`01ed0150 : fffffa60`087b5498 fffffa60`087b4e70 fffff800`01f95190 fffff800`01e4e000 : nt!KiPageFault+0x1e5 
fffffa60`087b4600 fffff800`01ed3f78 : fffffa60`00000001 00000000`00000000 00000000`00000000 ffffffff`ffffff88 : nt!RtlVirtualUnwind+0x250 
fffffa60`087b4670 fffff800`01ee1706 : fffffa60`087b5498 fffffa60`087b4e70 fffffa60`00000000 00000000`00000000 : nt!RtlDispatchException+0x118 
fffffa60`087b4d60 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiDispatchException+0xc2 


STACK_COMMAND: kb 

FOLLOWUP_IP: 
nt!KiDoubleFaultAbort+b8 
fffff800`01ea6a38 90    nop 

SYMBOL_STACK_INDEX: 2 

SYMBOL_NAME: nt!KiDoubleFaultAbort+b8 

FOLLOWUP_NAME: MachineOwner 

MODULE_NAME: nt 

IMAGE_NAME: ntkrnlmp.exe 

DEBUG_FLR_IMAGE_TIMESTAMP: 49e0237f 

FAILURE_BUCKET_ID: X64_0x7f_8_nt!KiDoubleFaultAbort+b8 

BUCKET_ID: X64_0x7f_8_nt!KiDoubleFaultAbort+b8 

Followup: MachineOwner 
--------- 

rax=fffffa60005f1b70 rbx=fffffa60087b43c8 rcx=000000000000007f 
rdx=0000000000000008 rsi=fffffa60087b4470 rdi=fffff80001f9bfa4 
rip=fffff80001ea8450 rsp=fffffa60005f1a68 rbp=fffffa60005f1c30 
r8=0000000080050033 r9=00000000000006f8 r10=fffff80001ee1678 
r11=fffffa60087b4468 r12=0000000000000000 r13=fffffa60087b4290 
r14=fffff8000205149c r15=fffff80001e4e000 
iopl=0   nv up ei ng nz na pe nc 
cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b    efl=00000282 
nt!KeBugCheckEx: 
fffff800`01ea8450 48894c2408  mov  qword ptr [rsp+8],rcx ss:0018:fffffa60`005f1a70=000000000000007f 
Child-SP   RetAddr   : Args to Child               : Call Site 
fffffa60`005f1a68 fffff800`01ea81ee : 00000000`0000007f 00000000`00000008 00000000`80050033 00000000`000006f8 : nt!KeBugCheckEx 
fffffa60`005f1a70 fffff800`01ea6a38 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiBugCheckDispatch+0x6e 
fffffa60`005f1bb0 fffff800`01ee1678 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiDoubleFaultAbort+0xb8 (TrapFrame @ fffffa60`005f1bb0) 
fffffa60`087b3c90 fffff800`01ea82a9 : fffffa60`087b43c8 00000000`00000001 fffffa60`087b4470 00000000`0000023b : nt!KiDispatchException+0x34 
fffffa60`087b4290 fffff800`01ea70a5 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000001 : nt!KiExceptionDispatch+0xa9 
fffffa60`087b4470 fffff800`01ed0150 : fffffa60`087b5498 fffffa60`087b4e70 fffff800`01f95190 fffff800`01e4e000 : nt!KiPageFault+0x1e5 (TrapFrame @ fffffa60`087b4470) 
fffffa60`087b4600 fffff800`01ed3f78 : fffffa60`00000001 00000000`00000000 00000000`00000000 ffffffff`ffffff88 : nt!RtlVirtualUnwind+0x250 
fffffa60`087b4670 fffff800`01ee1706 : fffffa60`087b5498 fffffa60`087b4e70 fffffa60`00000000 00000000`00000000 : nt!RtlDispatchException+0x118 
fffffa60`087b4d60 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiDispatchException+0xc2 

답변

1

windbg에 대한 도움말 파일은 다양한 커널 모드 버그 검사 및 그에 대한 조치에 대해 자세히 설명합니다. 나는 당신의 전문성이나 당신이 여기에서 기대하고있는 것을 정말로 모르지만, 일반적으로 델파이 같은 사용자 모드 프로그램에서 할 수있는 일은 아무 것도 없다. 따라서 우리는 일반적으로 드라이버 버그 또는 일종의 하드웨어 오류를 가정합니다.

나는 도움 인덱스로 UNEXPECTED_KERNEL_MODE_TRAP를 입력하고이 페이지를 가지고 :

Windows 드라이버 키트 : UNEXPECTED_KERNEL_MODE_TRAP는 UNEXPECTED_KERNEL_MODE_TRAP 버그 체크 은 0x0000007F의 값이 : 0x7F의 확인 도구를 버그 디버깅을. 이 버그 검사는 Intel CPU 이 트랩을 생성했으며 커널이 이이 트랩을 잡는 데 실패했음을 나타냅니다.

(항상 시스템 오류 발생 이전 오류를 처리하는 동안 가 발생하는 오류)이 트랩은 바운드 트랩 또는 더블 폴트 (A 트랩 커널은 캐치에 허용되지 않습니다) 할 수

.

0x00000008

생략

... 또는 이중 장애는, 예외가 종래 예외 핸들러의 호출 동안 발생 나타낸다. 일반적으로 두 가지 예외는 순차적으로 처리됩니다. 그러나 여러 가지 예외가 있으며 을 순차적으로 처리 할 수 ​​없으며이 상황에서는 프로세서가 이중 오류를 신호합니다. 이중 결함의 원인은 두 가지가 있습니다.

커널 스택 오버플로입니다. 이 오버플로는 가드 페이지가 공격을 받고 커널이 트랩 프레임을 푸시하려고하면 이 발생합니다. 스택이 남아 있지 않으므로 스택 오버플로가 발생하여 이중 오류가 발생합니다. 이 개요가 발생했다면 에! thread를 사용하여 스택 제한을 결정한 다음 은 큰 매개 변수 (예 : kb 100)와 함께 kb (스택 스택 백 트레이스 표시)를 사용하여 전체 스택을 표시합니다.

하드웨어 문제.

원인 버그 0x7F의는 일반적으로 결함이있는 또는 일치하지 않는 하드웨어 (특히 메모리)을 설치 한 후 를 발생하거나 설치된 하드웨어 이 실패 할 경우 확인합니다.

커널 스택 오버플로시 이중 오류가 발생할 수 있습니다. 여러 개의 드라이버가 동일한 스택에 연결된 인 경우이 오버 플로우 이 발생합니다. 예를 들어, 두 파일 시스템 필터 드라이버가 같은 스택에 연결된 경우 파일 시스템이 다시 으로 되풀이되면 스택 오버플로가 발생합니다.

생략

은 ...

그것은 그것에 대해 더 많은 세부 사항, 그리고 다양한 디버깅 기술과 당신이 문제를 해결하기 위해 할 수있는에 계속된다.

+0

감사합니다. 사용자 모드 응용 프로그램이 BSOD를 발생시킬 수는 없지만 확실하지는 않았지만 같은 시점에 델파이 2009에서만 발생했던 우연의 일치가 너무 많았습니다. 여러 번 재부팅 한 후에 앱에 있지만 메모리가 올바른 위치에 있어야합니다. 나는 비스타 64 비트가 주소 랜덤 화를 가지고 있다고 생각했다. 어쨌든 그 컴퓨터의 메모리가 고장났습니다 (MS "Windows 메모리 진단"및 MemTest86 +으로 테스트했습니다.) – Bruce

+0

위의 설명은 정확하지 않으며 MSDN도이 점에 틀립니다. 이것은 커널 스택 크기 커널 스택은 잘못된 페이지에 의해 보호됩니다. 따라서 페이지에서 잘못된 주소를 치면 프로세서가 페이지 오류를 생성하고 레지스터를 밀어 넣으려고 시도하여 두 번째 페이지 오류를 얻습니다. "의미합니다. – steve

관련 문제