“非法指令(核心转储)”到底是什么意思?

“非法指令(核心转储)”到底是什么意思?

我看到很多解决问题的解决方案,例如

非法指令(核心转储)

但是,我想知道这到底意味着什么?是什么产生了该错误,其根本原因是什么? 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]

答案1

对于 x86。这个屏幕上的错误似乎是SIGILL由内核发送的结果,这是在kernel/traps.ccatch中定义的“CPU 陷阱” X86_TRAP_UD。这是a类中的一个其他几个直接从 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 演示这一点的程序列表

相关内容