Linux-Kernel
“非法指令(核心轉儲)”到底是什麼意思?
我看到了很多解決問題的方法,例如
非法指令(核心轉儲)
但是,我想知道這到底是什麼意思?是什麼產生了這個錯誤,它的根本原因是什麼?是 CPU 得到了它認為是指令但無法解碼的人嗎?產生該錯誤的幕後情況是什麼?
從
dmesg
,我看到[429572.598803] traps: test[4054] trap invalid opcode ip:400066 sp:ffac8cc0 error:0 in test[400000+1000] [429758.598292] traps: test[4401] trap invalid opcode ip:400066 sp:ffa3f990 error:0 in test[400000+1000] [430066.170626] traps: test[4854] trap invalid opcode ip:400066 sp:ff8ab000 error:0 in test[400000+1000] [430439.855002] traps: test[5212] trap invalid opcode ip:8048071 sp:ffce2fa0 error:0 in test[8048000+1000]
**對於 x86。**這個螢幕錯誤似乎是
SIGILL
核心發送的結果,這是在kernel/traps.c
catch中定義的“CPU 陷阱”X86_TRAP_UD
。它是直接從 CPU 產生的其他幾個類別中的一個,包括:X86_TRAP_DE, divide_error X86_TRAP_NMI, nmi X86_TRAP_BR, bounds X86_TRAP_UD, invalid_op X86_TRAP_NM, device_not_available X86_TRAP_OLD_MF, coprocessor_segment_overrun X86_TRAP_TS, invalid_TSS X86_TRAP_NP, segment_not_present X86_TRAP_SS, stack_segment X86_TRAP_GP, general_protection X86_TRAP_SPURIOUS, spurious_interrupt_bug X86_TRAP_MF, coprocessor_error X86_TRAP_AC, alignment_check X86_TRAP_XF, simd_coprocessor_error
為了娛樂,您可以在此處查看使用 Golf 展示的程序列表