Linux内核中的UD2操作码的目的是什么?

我在Linux内核(不是相应的C代码)中find了以下片段,在启动阶段的某个地方。 您可以清楚地看到0F 0B部分,代表UD2操作码(IDA拒绝拆卸)。

在这里和这里解释的这个操作码有一些可能的用法。 但是,在这种情况下,这个指令之后的操作码实际上并不合理。

 seg000:000C059E test edx, edx seg000:000C05A0 jnz short loc_C05AA seg000:000C05A0 ; -------------------------------------------------- seg000:000C05A2 db 0Fh seg000:000C05A3 db 0Bh seg000:000C05A4 db 73h seg000:000C05A5 db 0 seg000:000C05A6 db 86h ; å seg000:000C05A7 db 4Ah ; J seg000:000C05A8 db 27h ; ' seg000:000C05A9 db 0C0h ; + seg000:000C05AA ; -------------------------------------------------- seg000:000C05AA seg000:000C05AA loc_C05AA: seg000:000C05AA cmp eax, [edi+4] seg000:000C05AD jbe short loc_C05B7 seg000:000C05AD ; -------------------------------------------------- seg000:000C05AF db 0Fh seg000:000C05B0 db 0Bh seg000:000C05B1 db 75h seg000:000C05B2 db 0 seg000:000C05B3 db 86h seg000:000C05B4 db 4Ah ; J seg000:000C05B5 db 27h ; ' seg000:000C05B6 db 0C0h ; + seg000:000C05B7 ; -------------------------------------------------- seg000:000C05B7 seg000:000C05B7 loc_C05B7: seg000:000C05B7 add ecx, 0FFFh seg000:000C05BD shr esi, 0Ch seg000:000C05C0 shr ecx, 0Ch seg000:000C05C3 sub ecx, esi seg000:000C05C5 cmp ecx, ebx seg000:000C05C7 jnb short loc_C05E9 seg000:000C05C9 lea esi, [esi+0] seg000:000C05D0 seg000:000C05D0 loc_C05D0: seg000:000C05D0 mov edx, [edi+8] seg000:000C05D3 btr [edx], ecx seg000:000C05D6 sbb eax, eax seg000:000C05D8 test eax, eax seg000:000C05DA jnz short loc_C05E4 seg000:000C05DA ; ------------------------------------------------ seg000:000C05DC db 0Fh seg000:000C05DD db 0Bh seg000:000C05DE db 7Fh seg000:000C05DF db 0 seg000:000C05E0 db 86h ; å seg000:000C05E1 db 4Ah ; J seg000:000C05E2 db 27h ; ' seg000:000C05E3 db 0C0h ; + seg000:000C05E4 ; ------------------------------------------------- seg000:000C05E4 seg000:000C05E4 loc_C05E4: seg000:000C05E4 inc ecx 

这是来自include / asm-i386 / bug.h的BUG()宏。

 /* * Tell the user there is some problem. * The offending file and line are encoded after the "officially * undefined" opcode for parsing in the trap handler. */ #ifdef CONFIG_DEBUG_BUGVERBOSE #define BUG() \ __asm__ __volatile__( "ud2\n" \ "\t.word %c0\n" \ "\t.long %c1\n" \ : : "i" (__LINE__), "i" (__FILE__)) 

例如,0C05AF处的文件名为0xC0274A86,行号为117(0x75)。