Bagikan melalui


0x1AA Pemeriksaan Bug: EXCEPTION_ON_INVALID_STACK

Pemeriksaan bug EXCEPTION_ON_INVALID_STACK memiliki nilai 0x000001AA. BugCheck ini menunjukkan bahwa pengiriman pengecualian disilangkan ke tumpukan kernel yang tidak valid. Ini mungkin menunjukkan bahwa penunjuk tumpukan kernel telah rusak selama pengiriman pengecualian atau lepaskan (misalnya karena kerusakan tumpukan penunjuk bingkai), atau bahwa driver sedang mengeksekusi dari tumpukan yang bukan tumpukan kernel hukum.

Penting

Topik ini untuk programmer. Jika Anda adalah pelanggan yang telah menerima kode kesalahan ini saat menggunakan komputer Anda, lihat Memecahkan masalah kesalahan layar biru.

Parameter EXCEPTION_ON_INVALID_STACK

Parameter Deskripsi

1

Penunjuk ke tumpukan saat ini.

2

Jenis batas tumpukan seperti NormalStackLimits (3). Karena tumpukan tidak valid, ini mewakili estimasi terbaik kernel tentang jenis tumpukan kernel yang harus aktif mengingat status komputer.

Jenis batas tumpukan:

  • 0x0 - Tumpukan bugcheck (tumpukan apa pun jika batas tumpukan dihitung selama waktu pemeriksaan bug)
  • 0x1 - Tumpukan DPC prosesor
  • 0x2 - Tumpukan KeExpandKernelStackAndCallout(Ex)
  • 0x3 - Tumpukan utas kernel normal
  • 0x4 - Tumpukan utas kernel selama pertukaran konteks utas (ambigu utas mana yang aktif)
  • 0x5 - Tumpukan callout kernel/pengguna win32k
  • 0x6 - Tumpukan ISR prosesor
  • 0x7 - Tumpukan debugger Kernel (tumpukan apa pun saat debugger kernel menangani KD I/O)
  • 0x8 - Tumpukan penanganan NMI prosesor
  • 0x9 - Tumpukan penanganan pemeriksaan mesin prosesor
  • 0xA - Tumpukan pengecualian prosesor (digunakan untuk mengirimkan pengecualian IRQL tertentu yang dinaikkan)

3

Penunjuk ke rekaman konteks yang mewakili konteks yang tidak dilupakan (atau dikirim untuk pengecualian) ketika tumpukan yang tidak valid ditemui.

4

Menyediakan catatan pengecualian yang mewakili pengecualian aktif yang sedang dikirim.

Penyebab

Terjadi upaya untuk mengakses tumpukan yang tidak valid. Karena tumpukan kernel berukuran terbatas, pengembang perlu berhati-hati dengan melacak batasnya, misalnya saat menggunakannya untuk menyalin blok memori video. Untuk informasi tentang tumpukan Kernel Windows, lihat Menggunakan Tumpukan Kernel.

Resolusi

Menggunakan cadangan kernel penuh atau debugger terlampir, perintah berikut mungkin berguna untuk mengumpulkan informasi dan melacak kode yang salah mengakses memori.

Pertama gunakan perintah !analyze untuk mengumpulkan informasi, khususnya parameter pemeriksaan bug. Periksa juga baris sumber dan nama modul yang salah, jika tersedia.

Arguments:
Arg1: 00000018940ffbe8
Arg2: 0000000000000003
Arg3: ffffe301c8db2900
Arg4: ffffdc0e9ee665d8

Gunakan tautan perintah .trap yang disediakan dalam output !analyze untuk mengatur konteks ke bingkai trap.

2: kd> .trap 0xffffdc0e9ee66680
NOTE: The trap frame does not contain all registers.
Some register values may be zeroed or incorrect.
rax=003f8b813f20b6e0 rbx=0000000000000000 rcx=ee7defdd9c530000
rdx=ffffcb81660ea078 rsi=0000000000000000 rdi=0000000000000000
rip=fffff8002b7f8933 rsp=ffffdc0e9ee66810 rbp=ffffcb81511c3010
 r8=0000000000000001  r9=0000000000004014 r10=ffffdc0e9ee66910
r11=0000000000000000 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0         nv up ei pl zr na po nc
dxgmms2!RemoveHeadList+0xd [inlined in dxgmms2!VidSchiSignalRegisteredSyncObjects+0x3f]:
fffff800`2b7f8933 48395808        cmp     qword ptr [rax+8],rbx ds:003f8b81`3f20b6e8=????????????????

Gunakan perintah !vm untuk memeriksa penggunaan memori, misalnya untuk melihat berapa banyak memori Kernel Stacks yang digunakan.

0: kd> !vm

Physical Memory:          1541186 (    6164744 Kb)
Available Pages:           470550 (    1882200 Kb)
ResAvail Pages:           1279680 (    5118720 Kb)

...

Kernel Stacks:              13686 (      54744 Kb)

Jumlah memori yang digunakan ini kurang dari yang tersedia dalam contoh ini.

Gunakan perintah !thread untuk mengumpulkan informasi tentang apa yang sedang berjalan. Dalam contoh ini terlihat seperti utas pekerja penjadwal video sedang berjalan.

2: kd> !thread
THREAD ffffcb816348b040  Cid 0c58.4a1c  Teb: 0000000000000000 Win32Thread: 0000000000000000 RUNNING on processor 2
Not impersonating
DeviceMap                 ffff840f38c04170
Owning Process            ffffcb81648980c0       Image:         YourPhone.exe
Attached Process          N/A            Image:         N/A
Wait Start TickCount      34501403       Ticks: 0
Context Switch Count      43             IdealProcessor: 3             
UserTime                  00:00:00.000
KernelTime                00:00:00.015
Win32 Start Address 0x00007fff34656d00
Stack Init ffffdc0e9ee675b0 Current ffffdc0e9ee66610
Base ffffdc0e9ee68000 Limit ffffdc0e9ee61000 Call 0000000000000000
Priority 8 BasePriority 8 PriorityDecrement 0 IoPriority 2 PagePriority 5
...

Kemudian gunakan kb (Display Stack Backtrace) dengan opsi f untuk menampilkan tumpukan dan penggunaan memori untuk melihat apakah ada pengguna memori besar.

2: kd> kf
...
02        40 ffffdc0e`9ee66850 fffff800`2b7f8801     dxgmms2!VidSchiMarkDeviceAsError+0x4d  
...

Jika bagian tertentu dari kode terlihat mencurigakan, gunakan perintah u, ub, uu (Tidak Dirakit) untuk memeriksa kode bahasa rakit terkait.

2: kd> u ffffdc0e`9ee66850 l10
ffffdc0e`9ee66850 1030            adc     byte ptr [rax],dh
ffffdc0e`9ee66852 1c51            sbb     al,51h
ffffdc0e`9ee66854 81cbffffc068    or      ebx,68C0FFFFh
ffffdc0e`9ee6685a e69e            out     9Eh,al
ffffdc0e`9ee6685c 0e              ???
ffffdc0e`9ee6685d dcff            fdiv    st(7),st
ffffdc0e`9ee6685f ff00            inc     dword ptr [rax]
ffffdc0e`9ee66861 0000            add     byte ptr [rax],al
ffffdc0e`9ee66863 0000            add     byte ptr [rax],al
ffffdc0e`9ee66865 0000            add     byte ptr [rax],al
ffffdc0e`9ee66867 000e            add     byte ptr [rsi],cl
ffffdc0e`9ee66869 0000            add     byte ptr [rax],al
ffffdc0e`9ee6686b 0000            add     byte ptr [rax],al
ffffdc0e`9ee6686d 0000            add     byte ptr [rax],al
ffffdc0e`9ee6686f 0010            add     byte ptr [rax],dl
ffffdc0e`9ee66871 301c51          xor     byte ptr [rcx+rdx*2],bl

Gunakan perintah .cxr (Rekaman Konteks Tampilan) untuk menampilkan rekaman konteks, menggunakan nilai parameter 3 yang disediakan oleh !analyze.

2: kd> .cxr ffffe301c8db2900
rax=003f8b813f20b6e0 rbx=ffffcb813f607650 rcx=ee7defdd9c530000
rdx=ffffcb81660ea078 rsi=0000000000000000 rdi=ffffcb81511c30a8
rip=fffff8002b7f8933 rsp=ffffdc0e9ee66810 rbp=ffffcb81511c3010
 r8=0000000000000001  r9=0000000000004014 r10=ffffdc0e9ee66910
r11=0000000000000000 r12=ffffdc0e9ee66910 r13=ffffcb814019c000
r14=0000000000000000 r15=ffffdc0e9ee66910
iopl=0         nv up ei pl zr na po nc
cs=0010  ss=0018  ds=002b  es=002b  fs=0053  gs=002b             efl=00050246
dxgmms2!RemoveHeadList+0xd [inlined in dxgmms2!VidSchiSignalRegisteredSyncObjects+0x3f]:
fffff800`2b7f8933 48395808        cmp     qword ptr [rax+8],rbx ds:002b:003f8b81`3f20b6e8=????????????????

Gunakan perintah .exr (Rekaman Pengecualian Tampilan) untuk menampilkan rekaman pengecualian, menggunakan nilai parameter 4 yang disediakan oleh !analyze.

2: kd> .exr ffffdc0e9ee665d8
ExceptionAddress: fffff8002b7f8933 (dxgmms2!RemoveHeadList+0x000000000000000d)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 0000000000000000
   Parameter[1]: ffffffffffffffff
Attempt to read from address ffffffffffffffff

Catatan pengecualian menunjukkan upaya untuk membaca dari dan alamat ffffffffffffffff, yang akan menjadi area untuk menyelidiki lebih lanjut.

Lihat Juga

Referensi Bug Check Code