2012-06-21 66 views
18

我已經在Linux內核(不是相應的C代碼)中找到了以下片段,在啓動階段的某個地方。您可以清楚地看到0F 0B部件,代表UD2操作碼(IDA拒絕拆卸)。Linux內核中UD2操作碼的用途是什麼?

解釋此操作碼有一些可能的用法herehere。但是,在這種情況下,這條指令後面的操作碼實際上並不合理。

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 

回答

15

這是來自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)的文件。

+0

就是這樣。謝謝 – copy

相關問題