全部博文(38)
分类:
2009-05-03 18:14:57
cli lgdt gdt32 mov eax, cr0 or eax, 0x1 mov cr0, eax /* 开启 protected mode */ jmp code32 /* jmp to code32 */ code32: mov bx, 0x18 mov ds, bx mov ss, bx xor eax, 0x01 mov cr0, eax /* 回到 real mode */ jmp code16 code16: mov eax, 0x11223344 mov dword ptr [eax], 0x12345678 /* 关键代码:real 下写 1M 以上空间代码 */ looo: jmp looo /* 死循环 */ |
0x00000000 0x00000000 /* gdt0: null descriptor */ 0x0000ffff 0x00cf9e00 /* gdt1: 32 bit code descriptor */ 0x0000ffff 0x00009e00 /* gdt2: 16 bit code descriptor */ 0x0000ffff 0x00cf9300 /* gdt3: 32 bit data descriptor */ 0x0000ffff 0x00009300 /* gdt4: 16 bit data descriptor */ |
00007c00: fa ; cli 00007c01: 0f 01 16 f0 7c ; lgdt [0x7cf0] 00007c06: 66 0f 20 c0 ; mov eax, cr0 00007c0a: 80 c8 01 ; or al, 0x01 00007c0d: 66 0f 22 c0 ; mov cr0, eax 00007c11: ea 16 7c 00 08 ; jmp far 0008:7c16 00007c16: c6 c3 18 ; mov bl, 0x18 00007c19: 8e db ; mov ds, bx 00007c1b: 8e d3 ; mov ss, bx 00007c1d: 80 f0 01 ; xor al, 0x01 00007c20: 66 0f 22 c0 ; mov cr0, eax 00007c24: eb 00 ; jmp $+00 00007c26: b8 44 33 22 11 ; mov eax, 0x11223344 00007c2b: c7 00 78 56 34 12 ; mov dword ptr [eax], 0x12345678 00007c31: eb fe ; jmp . |