2012-06-21 24 views
18

Tôi đã tìm thấy đoạn sau trong nhân Linux (không phải mã C tương ứng), ở đâu đó trong giai đoạn khởi động. Bạn có thể thấy rõ các bộ phận 0F 0B, phù hợp với mã vạch UD2 (IDA đã từ chối tháo rời).Mục đích của mã hóa UD2 trong hạt nhân Linux là gì?

Có một số tập quán có thể cho mã opcode này được giải thích herehere. Tuy nhiên, trong trường hợp này, các opcodes sau lệnh này không thực sự hợp lý.

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 

Trả lời

15

Đó là macro BUG() từ 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__)) 

Ví dụ: số 0C05AF dành cho tệp có tên 0xC0274A86 và dòng số 117 (0x75).

+0

Vậy đó. Cảm ơn – copy

Các vấn đề liên quan