LTCD_070816.ISO
This commit is contained in:
1 parent
d14bbc24f9
commit
0e9364ff4c
506 files changed
+157705
-41812
No files matched your search
@@ -0,0 +1,330 @@
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
IDLE_START::
|
||||
SAVE_CONTEXT::
|
||||
PUSH RAX
|
||||
PUSHFD
|
||||
XOR EAX,EAX
|
||||
MOV RAX,FS:TSS_ABSOLUTE_ADDRESS[RAX]
|
||||
POP U8 TSS_RFLAGS[RAX]
|
||||
MOV U8 TSS_RBX[RAX],RBX
|
||||
MOV U8 TSS_RCX[RAX],RCX
|
||||
MOV U8 TSS_RDX[RAX],RDX
|
||||
MOV U8 TSS_RSI[RAX],RSI
|
||||
MOV U8 TSS_RDI[RAX],RDI
|
||||
MOV U8 TSS_RBP[RAX],RBP
|
||||
MOV U8 TSS_R8[RAX],R8
|
||||
MOV U8 TSS_R9[RAX],R9
|
||||
MOV U8 TSS_R10[RAX],R10
|
||||
MOV U8 TSS_R11[RAX],R11
|
||||
MOV U8 TSS_R12[RAX],R12
|
||||
MOV U8 TSS_R13[RAX],R13
|
||||
MOV U8 TSS_R14[RAX],R14
|
||||
MOV U8 TSS_R15[RAX],R15
|
||||
POP U8 TSS_RAX[RAX]
|
||||
|
||||
MOV RSI,RAX
|
||||
XOR EAX,EAX
|
||||
RDTSC
|
||||
SHL RDX,32
|
||||
ADD RAX,RDX
|
||||
MOV RBX,RAX
|
||||
@@31: LOCK
|
||||
BTS U4 [SYS_SEMAS+SYS_SEMA_TIMESTAMP*SEMA_STRUCT_SIZE],0
|
||||
JC @@31
|
||||
SUB RBX,U8 TSS_TIME_SLICE_START[RSI]
|
||||
ADD U8 TSS_TOTAL_TIME[RSI],RBX
|
||||
LOCK
|
||||
BTR U4 [SYS_SEMAS+SYS_SEMA_TIMESTAMP*SEMA_STRUCT_SIZE],0
|
||||
|
||||
FSAVE U4 TSS_FPU[RSI]
|
||||
|
||||
BT U4 TSS_TASK_FLAGS[RSI],TSSf_DISABLE_BPTS
|
||||
JC @@4
|
||||
MOV RSI,U8 TSS_BPT_LIST[RSI]
|
||||
@@3: OR RSI,RSI
|
||||
JZ @@4
|
||||
MOV RDI,U8 BPT_ADDRESS[RSI]
|
||||
MOV AL,U1 BPT_U1[RSI]
|
||||
MOV U1 [RDI],AL
|
||||
MOV RSI,U8 BPT_NEXT[RSI]
|
||||
JMP @@3
|
||||
@@4: RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
RESTORE_CONTEXT::
|
||||
XOR EAX,EAX
|
||||
MOV RAX,GS:CPU_ABSOLUTE_ADDRESS[RAX]
|
||||
LOCK
|
||||
INC U8 CPU_SWAP_CNTER[RAX]
|
||||
XOR EAX,EAX
|
||||
MOV RSI,FS:TSS_ABSOLUTE_ADDRESS[RAX]
|
||||
BT U4 TSS_TASK_FLAGS[RSI],TSSf_DISABLE_BPTS
|
||||
JC @@4
|
||||
MOV RDX,U8 TSS_BPT_LIST[RSI]
|
||||
@@3: OR RDX,RDX
|
||||
JZ @@4
|
||||
MOV RDI,U8 BPT_ADDRESS[RDX]
|
||||
CMP RDI,U8 TSS_RIP[RSI]
|
||||
JNE @@5
|
||||
BTR U8 BPT_FLAGS[RDX],SBPTf_DISABLE
|
||||
JC @@6
|
||||
@@5: MOV AL,U1 [RDI]
|
||||
MOV U1 BPT_U1[RDX],AL
|
||||
MOV U1 [RDI],0xCC
|
||||
@@6: MOV RDX,U8 BPT_NEXT[RDX]
|
||||
JMP @@3
|
||||
|
||||
@@4: INC U8 TSS_SWAP_CNTER[RSI]
|
||||
|
||||
FRSTOR U4 TSS_FPU[RSI]
|
||||
|
||||
XOR EAX,EAX
|
||||
RDTSC
|
||||
SHL RDX,32
|
||||
ADD RAX,RDX
|
||||
MOV RBX,RAX
|
||||
MOV U8 TSS_TIME_SLICE_START[RSI],RBX
|
||||
|
||||
MOV RBX,U8 TSS_RBX[RSI]
|
||||
MOV RCX,U8 TSS_RCX[RSI]
|
||||
MOV RDX,U8 TSS_RDX[RSI]
|
||||
MOV RDI,U8 TSS_RDI[RSI]
|
||||
MOV RBP,U8 TSS_RBP[RSI]
|
||||
MOV R8,U8 TSS_R8[RSI]
|
||||
MOV R9,U8 TSS_R9[RSI]
|
||||
MOV R10,U8 TSS_R10[RSI]
|
||||
MOV R11,U8 TSS_R11[RSI]
|
||||
MOV R12,U8 TSS_R12[RSI]
|
||||
MOV R13,U8 TSS_R13[RSI]
|
||||
MOV R14,U8 TSS_R14[RSI]
|
||||
MOV R15,U8 TSS_R15[RSI]
|
||||
|
||||
MOV RAX,U8 TSS_RAX[RSI]
|
||||
PUSH ZERO_DS_SEL
|
||||
PUSH U8 TSS_RSP[RSI]
|
||||
PUSH U8 TSS_RFLAGS[RSI]
|
||||
PUSH SYS_CS64_SEL
|
||||
PUSH U8 TSS_RIP[RSI]
|
||||
MOV RSI,U8 TSS_RSI[RSI]
|
||||
IRET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
END_TASK_EVT::
|
||||
MOV RAX,RSI
|
||||
CALL PUT_FS_BASE
|
||||
CALL END_TASK
|
||||
MOV RSI,RAX
|
||||
CALL PUT_FS_BASE
|
||||
JMP SIN_PART2
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
SWAP_IN_NEXT::
|
||||
PUSHFD
|
||||
CLI
|
||||
CALL SAVE_CONTEXT
|
||||
|
||||
XOR ESI,ESI
|
||||
MOV RSI,FS:TSS_ABSOLUTE_ADDRESS[RSI]
|
||||
MOV RBX,U4 IDLE_POINT
|
||||
MOV U8 TSS_RIP[RSI],RBX
|
||||
POP U8 TSS_RFLAGS[RSI]
|
||||
MOV U8 TSS_RSP[RSI],RSP
|
||||
|
||||
SIN_PART1::
|
||||
MOV RSI,U8 TSS_NEXT_TSS[RSI]
|
||||
SIN_PART2::
|
||||
TEST U4 [SYS_FLAGS],1<<SYSf_CTRL_ALT_DEL|1<<SYSf_CTRL_ALT_ESC|
|
||||
1<<SYSf_CTRL_ALT_TAB|1<<SYSf_CTRL_ALT_X|1<<SYSf_CTRL_ALT_C
|
||||
JNZ SWAP_EVT
|
||||
|
||||
SIN_PART3::
|
||||
BT U4 TSS_TASK_FLAGS[RSI],TSSf_KILL_TASK
|
||||
JC END_TASK_EVT
|
||||
@@1: TEST U4 TSS_TASK_FLAGS[RSI],1<<TSSf_AWAITING_MSG|1<<TSSf_SUSPENDED
|
||||
JNZ SIN_PART1
|
||||
CMP U4 TSS_IN_QUEUE_SIGNATURE[RSI],TSSS_IN_QUEUE_SIGNATURE
|
||||
JNE RECOVER_FROM_BAD_TASK
|
||||
MOV RAX,RSI
|
||||
CALL PUT_FS_BASE
|
||||
JMP U4 RESTORE_CONTEXT
|
||||
|
||||
RECOVER_FROM_BAD_TASK::
|
||||
XOR EAX,EAX
|
||||
MOV RAX,GS:CPU_ABSOLUTE_ADDRESS[RAX]
|
||||
MOV RSI,U8 CPU_CAIN_TSS[RAX]
|
||||
JMP SIN_PART2
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
IDLE_POINT::
|
||||
RET
|
||||
|
||||
ALIGN 8,OC_NOP
|
||||
SWAP_EVT::
|
||||
MOV RAX,RSI
|
||||
CALL PUT_FS_BASE
|
||||
XOR EAX,EAX
|
||||
MOV RAX,GS:CPU_ABSOLUTE_ADDRESS[RAX]
|
||||
MOV RAX,U8 CPU_NUM[RAX]
|
||||
OR RAX,RAX
|
||||
JNZ SIN_PART3
|
||||
|
||||
MOV RAX,U4 SYS_FLAGS
|
||||
BTR U4 [RAX],SYSf_CTRL_ALT_DEL
|
||||
JC U4 CP_REBOOT
|
||||
|
||||
BTR U4 [RAX],SYSf_CTRL_ALT_ESC
|
||||
JNC @@2
|
||||
CALL SPAWN_USER_AND_ACTIVATE
|
||||
JMP CONT_SWAP2
|
||||
|
||||
@@2: BTR U4 [RAX],SYSf_CTRL_ALT_TAB
|
||||
JNC @@3
|
||||
CALL CP_ACTIVATE_NEXT_USER
|
||||
JMP CONT_SWAP2
|
||||
|
||||
@@3: BTR U4 [RAX],SYSf_CTRL_ALT_X
|
||||
JC END_ACTIVE_USER
|
||||
BTR U4 [RAX],SYSf_CTRL_ALT_C
|
||||
JNC U4 SIN_PART2
|
||||
|
||||
BREAK_ACTIVE_USER::
|
||||
MOV RSI,U8 [SYS_CUR_FOCUS_TASK]
|
||||
OR RSI,RSI
|
||||
JZ RECOVER_FROM_BAD_TASK
|
||||
BT U4 TSS_TASK_FLAGS[RSI],TSSf_LOCAL_USER
|
||||
JNC U4 SIN_PART3
|
||||
MOV RAX,CP_BREAK
|
||||
MOV U8 TSS_RIP[RSI],RAX
|
||||
JMP U4 SIN_PART3
|
||||
|
||||
END_ACTIVE_USER::
|
||||
CALL DEACTIVATE_USER
|
||||
PUSH RSI
|
||||
CALL ACTIVATE_NEXT_USER
|
||||
POP RSI
|
||||
OR RSI,RSI
|
||||
JZ U4 RECOVER_FROM_BAD_TASK
|
||||
MOV RAX,RSI
|
||||
CALL PUT_FS_BASE
|
||||
BT U4 TSS_TASK_FLAGS[RSI],TSSf_LOCAL_USER
|
||||
JNC U4 SIN_PART2
|
||||
BTS U4 TSS_TASK_FLAGS[RSI],TSSf_KILL_TASK
|
||||
CONT_SWAP2::
|
||||
XOR ESI,ESI
|
||||
MOV RSI,FS:TSS_ABSOLUTE_ADDRESS[RSI]
|
||||
JMP U4 SIN_PART2
|
||||
|
||||
IDLE_END::
|
||||
|
||||
////**************************PROCEDURE*************************
|
||||
MSG_USER_CMD_DESC: DU1 "User CMD",0;
|
||||
ALIGN 8,OC_NOP
|
||||
SPAWN_USER_AND_ACTIVATE::
|
||||
PUSHFD
|
||||
CLI
|
||||
PUSH RAX
|
||||
PUSH RCX
|
||||
PUSH RDX
|
||||
PUSH RBX
|
||||
PUSH RBP
|
||||
PUSH RSI
|
||||
PUSH RDI
|
||||
MOV U8 [SYS_CUR_FOCUS_TASK],0
|
||||
|
||||
PUSH TRUE //add to queue
|
||||
PUSH DEFAULT_STACK
|
||||
PUSH 0 ///use adam account
|
||||
PUSH 0 //Adam is parent
|
||||
PUSH U4 MSG_USER_CMD_DESC
|
||||
PUSH U4 CP_USER_CMD_LINE
|
||||
CALL CP_SPAWN_TASK
|
||||
ADD RSP,48
|
||||
|
||||
PUSH RAX
|
||||
MOV RAX,U8 [SYS_EXTERN_TABLE]
|
||||
MOV RAX,U8 EXT_WIN_TO_TOP*8[RAX]
|
||||
OR RAX,RAX
|
||||
JZ @@1
|
||||
CALL RAX
|
||||
@@1: ADD RSP,8
|
||||
|
||||
POP RDI
|
||||
POP RSI
|
||||
POP RBP
|
||||
POP RBX
|
||||
POP RDX
|
||||
POP RCX
|
||||
POP RAX
|
||||
POPFD
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
//IN: RSI=CUR User TSS
|
||||
ALIGN 8,OC_NOP
|
||||
ACTIVATE_NEXT_USER:
|
||||
PUSHFD
|
||||
CLI
|
||||
PUSH RDI
|
||||
OR RSI,RSI
|
||||
JNZ @@11
|
||||
MOV RSI,U4 SYS_ADAM_TSS
|
||||
@@11: MOV RDI,RSI
|
||||
MOV RSI,U8 TSS_NEXT_TSS[RSI]
|
||||
@@14: BT U4 TSS_TASK_FLAGS[ESI],TSSf_LOCAL_USER
|
||||
JNC @@19
|
||||
CMP U8 [SYS_CUR_FOCUS_TASK],RSI
|
||||
JE @@19
|
||||
MOV U8 [SYS_CUR_FOCUS_TASK],RSI
|
||||
MOV RAX,U8 [SYS_EXTERN_TABLE]
|
||||
MOV RAX,U8 EXT_WIN_TO_TOP*8[RAX]
|
||||
OR RAX,RAX
|
||||
JZ @@19B
|
||||
PUSH RAX
|
||||
PUSH RCX
|
||||
PUSH RDX
|
||||
PUSH RBX
|
||||
PUSH RBP
|
||||
PUSH RSI
|
||||
PUSH RDI
|
||||
PUSH RSI
|
||||
CALL RAX
|
||||
ADD RSP,8
|
||||
POP RDI
|
||||
POP RSI
|
||||
POP RBP
|
||||
POP RBX
|
||||
POP RDX
|
||||
POP RCX
|
||||
POP RAX
|
||||
JMP @@19B
|
||||
@@19: MOV RSI,U8 TSS_NEXT_TSS[RSI]
|
||||
CMP RSI,RDI
|
||||
JNE @@14
|
||||
@@19B: POP RDI
|
||||
POPFD
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
//OUT: ESI=TSS OF User
|
||||
ALIGN 8,OC_NOP
|
||||
DEACTIVATE_USER:
|
||||
MOV RSI,U8 [SYS_CUR_FOCUS_TASK]
|
||||
MOV U8 [SYS_CUR_FOCUS_TASK],0
|
||||
RET
|
||||
|
||||
////**************************PROCEDURE*************************
|
||||
//IN: ESI=CUR User TSS
|
||||
ALIGN 8,OC_NOP
|
||||
CP_ACTIVATE_NEXT_USER::
|
||||
PUSH RSI
|
||||
CALL DEACTIVATE_USER
|
||||
CALL ACTIVATE_NEXT_USER
|
||||
POP RSI
|
||||
RET
|
||||
////**************************PROCEDURE*************************
|
||||
ALIGN 8,OC_NOP
|
||||
CP_DEACTIVATE_USER::
|
||||
PUSH RSI
|
||||
CALL DEACTIVATE_USER
|
||||
MOV RAX,RSI
|
||||
POP RSI
|
||||
RET
|
||||
Reference in new issue
Block a user