2012-06-21 10 views
18

Linux kernelinde (ilgili C kodu olmasa bile), başlangıç ​​aşamasında bir yerde aşağıdaki parçayı buldum. UD2 opkodu (IDA'nın sökmeyi reddetti) için geçerli olan 0F 0B parçalarını açıkça görebilirsiniz.Linux çekirdeğindeki UD2 işlemcinin amacı nedir?

Bu opcode için here ve here açıklanan bazı olası kullanımlar vardır. Ancak bu durumda, bu talimatın ardından opcodes gerçekten anlam ifade etmemektedir.

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 

cevap

15

O include/asm-i386/bug.h dan BUG() makro var.

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

Örneğin, 0C05AF az bir 0xC0274A86 de adı ile dosya ve satır numarası 117 (0x75) içindir.

+0

İşte bu kadar. Teşekkürler – copy