2012-06-21 7 views
18

He encontrado el siguiente fragmento en el núcleo de Linux (aunque no el código C correspondiente), en algún lugar durante la fase de inicio. Puede ver claramente las piezas 0F 0B, que representan el código de operación UD2 (IDA se negó a desmontar).¿Cuál es el propósito del código de operación UD2 en el kernel de Linux?

Existen algunos usos posibles para este código de operación explicado here y here. En este caso, sin embargo, los códigos de operación después de esta instrucción realmente no tienen sentido.

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 

Respuesta

15

Es la macro ERROR() desde include/asm-i386/bug.h.

/* 
* 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__)) 

Por ejemplo, el uno en 0C05AF es para archivo con nombre en 0xC0274A86 y número de línea 117 (0x75).

+0

Eso es todo. Gracias – copy

Cuestiones relacionadas