Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- segment code code
- CodeSegment:
- ..start:
- mov eax, cr0
- xor eax, 01h
- mov cr0, eax
- jmp ExitProgram
- mov ecx, 07h
- mov edi, GDTTables
- mov esi, GDTScratch
- rep movsd
- mov ax, 37h
- rol ax, 08h
- mov [GDTTLim], ax
- mov eax, GDTScratch
- bswap eax
- mov [GDTTLinear], eax
- lgdt [GDTRam]
- mov eax, cr0
- or eax, 01h
- mov cr0, eax
- xor edx, edx
- mov edi, IDTTables
- mov esi, edx
- SaveInts:
- cmp edx, 0100h
- je LoadIDT
- cmp dword [esi], 00h
- je InvalidISR
- lea ax, [esi + 02h]
- lea bx, [esi + 00h]
- mov cx, 0010h
- xor edx, edx
- mul cx
- add ax, bx
- rol ax, 08h
- mov bl, 8eh
- jmp ConvertISR
- InvalidISR:
- mov ax, 00h
- mov bl, 0eh
- ConvertISR:
- mov [edi + 00h], ax
- mov word [edi + 02h], 0100h
- mov byte [edi + 04h], 00h
- mov byte [edi + 05h], bl
- mov word [edi + 06h], 00h
- inc edx
- add edi, 08h
- add esi, 04h
- jmp SaveInts
- LoadIDT:
- mov ax, 0800h
- rol ax, 08h
- mov [IDTLim], ax
- mov eax, IDTTables
- bswap eax
- mov [IDTLinear], eax
- lidt [IDTRam]
- jmp SafeJump
- SafeJump:
- mov ax, 0003h
- mov cs, ax
- mov ax, 0002h
- mov ds, ax
- mov es, ax
- mov ax, 0001h
- mov ss, ax
- mov eax, StackTop
- mov esp, eax
- HackElection:
- mov ecx, 0fh
- mov edi, Winner
- mov esi, NewWinner
- movsb
- ExitProgram:
- mov ax, 4c00h ; return code
- int 21h ; EXIT
- CodeTop:
- segment data data
- DataSegment:
- GDTScratch: dw 00h ; lim_0_15
- dw 00h ; bas_0_15
- db 00h ; bas_16_23
- db 00h ; access
- db 00h ; gran
- db 00h ; bas_24_31
- ; - GDT Code Entry (Ring Zero) ----------
- dw 0ffffh
- dw 00h
- db 00h
- db 9eh
- db 0c0h
- db 00h
- ; - GDT Data Entry (Ring Zero) ----------
- dw 0ffffh
- dw DataSegment
- db 00h
- db 8eh
- db 0c0h
- db 00h
- ; - GDT Stack Entry (Ring Zero) ---------
- dw 0ffffh
- dw StackSegment
- db 00h
- db 8eh
- db 0c0h
- db 00h
- ; - GDT Code Entry (Ring Three) ---------
- dw 5555h
- dw 00h
- db 0ffh
- db 0deh
- db 0c0h
- db 0ffh
- ; - GDT Data Entry (Ring Three) ---------
- dw 5555h
- dw 5555h
- db 0ffh
- db 0ceh
- db 0c0h
- db 0ffh
- ; - GDT Stack Entry (Ring Three) --------
- dw 5555h
- dw 0aaaah
- db 0ffh
- db 0ceh
- db 0c0h
- db 0ffh
- NewWinner: db 'Sergove Trotsky', 00h
- DataTop:
- segment stack stack
- StackSegment:
- ElectionResults:
- Loser: resq 0ffh
- Winner: resq 0ffh
- ; -------------------------------------------------------
- ; - Global Descriptor Tables ----------------------------
- GDTTables:
- GND: resq 01h
- GCD0: resq 01h
- GDD0: resq 01h
- GSD0: resq 01h
- GCD3: resq 01h
- GDD3: resq 01h
- GSD3: resq 01h
- ; -------------------------------------------------------
- IDTTables: resq 0100h
- ; - LGDT/LIDT Structure ---------------------------------
- GDTRam:
- GDTTLim: resw 01h
- GDTTLinear: resd 01h
- IDTRam:
- IDTLim: resw 01h
- IDTLinear: resd 01h
- ; -------------------------------------------------------
- StackTop:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement