📄 messages.asm
字号:
pop eax mov [ds:ebp + s_task.r_eflags], eax ;;;; mov [ds:ebp + s_task.r_esp], esp ;;;; mov ax,kernel_data - _GDT mov ss, ax mov esp, [kernel_esp] mov eax, [ebp + s_task.r_ebx] push ebp ;;;; call FindTask jnc Int_SendAnswer0 ;;;; pop ebp mov eax, RESULT_INVALID_TASKID jmp Int_ScheduleCurr_errEax ;;;;Int_SendAnswer0: mov [ebp + s_task.state], DWORD STATE_RUNNING ;;;; pop esi mov ecx, [esi + s_task.r_ecx] mov eax, [ebp + s_task.r_edx] cmp eax, ecx jnc Int_SendAnswer1 mov [ebp + s_task.r_eax], DWORD RESULT_BUFFER_TOO_SMALL or [ebp + s_task.r_eflags], DWORD CF_OR mov ebp, esi jmp Int_ScheduleCurr_succInt_SendAnswer1: mov eax, [esi + s_task.r_eax] mov [ebp + s_task.r_eax], eax mov [ebp + s_task.r_ecx], ecx and [ebp + s_task.r_eflags], DWORD CF_AND push esi ;;;; mov eax, [esi + s_task.taskPageAddr] mov esi, [esi + s_task.r_esi] add esi, eax ;;;; mov edi, [ebp + s_task.r_edi] add edi, [ebp + s_task.taskPageAddr] ;;;; rep movsb ;;;; pop ebp jmp Int_ScheduleCurr_succ;------------------------------------------------------------------;------------------------------------------------------------------;------------------------------------------------------------------;------------------------------------------------------------------SysCall_Sleep: xor eax, eax mov [ebp + s_task.r_eax], eax mov [ebp + s_task.r_ecx], eax and [ebp + s_task.r_eflags], DWORD CF_AND jmp Schedule;------------------------------------------------------------------SysCall_GetTickCount: mov eax, [globalTime] jmp Int_ScheduleCurr_succEax;------------------------------------------------------------------SysCall_FindTaskByName: mov ecx, [ebp + s_task.r_ecx] cmp ecx, (MAX_TASK_NAME + 1) jc Sc_FindTaskByName0 mov eax, RESULT_INCORRECT_SYSCALL_PARAMS jmp Int_ScheduleCurr_errEaxSc_FindTaskByName0: mov esi, sc_findTaskName mov edi, sc_findTaskName + 1 mov ecx, MAX_TASK_NAME mov [esi], BYTE 0 rep movsb mov esi, [ebp + s_task.r_esi] add esi, [ebp + s_task.taskPageAddr] mov edi, sc_findTaskName mov ecx, [ebp + s_task.r_ecx] jecxz Sc_FindTaskByName1 rep movsbSc_FindTaskByName1: mov esi, sc_findTaskName push ebp call FindTaskByName pop ebp jnc Sc_FindTaskByName2 mov eax, RESULT_TASK_NOT_FOUND jmp Int_ScheduleCurr_errEaxSc_FindTaskByName2: jmp Int_ScheduleCurr_succEaxsc_findTaskName times (MAX_TASK_NAME + 1) db 0;------------------------------------------------------------------SysCall_RmodeInt: mov ecx, [ebp + s_task.r_ecx] cmp ecx, krnl_RmodeInt.msize jz Sc_RmodeInt0 mov eax, RESULT_INCORRECT_SYSCALL_PARAMS jmp Int_ScheduleCurr_errEaxSc_RmodeInt0: mov esi, [ebp + s_task.r_esi] add esi, [ebp + s_task.taskPageAddr] mov ax, [esi + krnl_RmodeInt.r_ax] mov [rmode_ax], ax mov ax, [esi + krnl_RmodeInt.r_bx] mov [rmode_bx], ax mov ax, [esi + krnl_RmodeInt.r_cx] mov [rmode_cx], ax mov ax, [esi + krnl_RmodeInt.r_dx] mov [rmode_dx], ax mov ax, [esi + krnl_RmodeInt.r_si] mov [rmode_si], ax mov ax, [esi + krnl_RmodeInt.r_di] mov [rmode_di], ax mov ax, [esi + krnl_RmodeInt.r_bp] mov [rmode_bp], ax mov ax, [esi + krnl_RmodeInt.r_ds] mov [rmode_ds], ax mov ax, [esi + krnl_RmodeInt.r_es] mov [rmode_es], ax mov ax, [esi + krnl_RmodeInt.r_flags] mov [rmode_flags],ax mov al, [esi + krnl_RmodeInt.intNum] call RmodeInt mov edx, [ebp + s_task.r_edx] cmp edx, krnl_RmodeInt.msize jnc Sc_RmodeInt1 mov eax, RESULT_BUFFER_TOO_SMALL jmp Int_ScheduleCurr_errEaxSc_RmodeInt1: mov edi, [ebp + s_task.r_edi] add edi, [ebp + s_task.taskPageAddr] mov ax, [esi + krnl_RmodeInt.intNum] mov [edi + krnl_RmodeInt.intNum], ax mov ax, [rmode_ax] mov [edi + krnl_RmodeInt.r_ax], ax mov ax, [rmode_bx] mov [edi + krnl_RmodeInt.r_bx], ax mov ax, [rmode_cx] mov [edi + krnl_RmodeInt.r_cx], ax mov ax, [rmode_dx] mov [edi + krnl_RmodeInt.r_dx], ax mov ax, [rmode_si] mov [edi + krnl_RmodeInt.r_si], ax mov ax, [rmode_di] mov [edi + krnl_RmodeInt.r_di], ax mov ax, [rmode_bp] mov [edi + krnl_RmodeInt.r_bp], ax mov ax, [rmode_ds] mov [edi + krnl_RmodeInt.r_ds], ax mov ax, [rmode_es] mov [edi + krnl_RmodeInt.r_es], ax mov ax, [rmode_flags] mov [edi + krnl_RmodeInt.r_flags], ax mov [ebp + s_task.r_eax], DWORD 0 mov [ebp + s_task.r_ecx], DWORD krnl_RmodeInt.msize jmp Int_ScheduleCurr_succ;------------------------------------------------------------------SysCall_GetScanCode: movzx eax, WORD [globalKey] cmp [globalKeySet],BYTE 0 jnz Sc_GetScanCode0 jmp Int_ScheduleCurr_errEaxSc_GetScanCode0: mov [globalKeySet], BYTE 0 jmp Int_ScheduleCurr_succEax;------------------------------------------------------------------SysCall_EnumTasksID: mov eax, [ebp + s_task.r_ecx] and eax, eax jz Sc_EnumTasksID0 mov eax, RESULT_INCORRECT_SYSCALL_PARAMS jmp Int_ScheduleCurr_errEaxSc_EnumTasksID0: mov ecx, [tasksCount] mov eax, ecx shl eax, 2 cmp eax, [ebp + s_task.r_edx] jbe Sc_EnumTasksID1 mov eax, RESULT_BUFFER_TOO_SMALL jmp Int_ScheduleCurr_errEaxSc_EnumTasksID1: mov [ebp + s_task.r_ecx],eax jecxz Sc_EnumTasksID3 mov esi, tasksList mov edi, [ebp + s_task.r_edi] add edi, [ebp + s_task.taskPageAddr]Sc_EnumTasksID2: movzx ebx, BYTE [esi] imul ebx, s_task.msize add ebx, tasks mov eax, [ebx + s_task.taskID] stosd inc esi loop Sc_EnumTasksID2Sc_EnumTasksID3: jmp Int_ScheduleCurr_succ;------------------------------------------------------------------SysCall_GetTaskName: mov eax, [ebp + s_task.r_ecx] cmp eax, 4 jz Sc_GetTaskName0 mov eax, RESULT_INCORRECT_SYSCALL_PARAMS jmp Int_ScheduleCurr_errEaxSc_GetTaskName0: mov eax, [ebp + s_task.r_edx] cmp eax, MAX_TASK_NAME + 1 jnc Sc_GetTaskName1 mov eax, RESULT_BUFFER_TOO_SMALL jmp Int_ScheduleCurr_errEaxSc_GetTaskName1: mov esi, [ebp + s_task.r_esi] add esi, [ebp + s_task.taskPageAddr] lodsd push ebp call FindTask jnc Sc_GetTaskName2 pop ebp mov eax, RESULT_INVALID_TASKID jmp Int_ScheduleCurr_errEaxSc_GetTaskName2: lea esi, [ebp + s_task.taskName] pop ebp mov edi, [ebp + s_task.r_edi] add edi, [ebp + s_task.taskPageAddr] mov ecx, MAX_TASK_NAME xor edx, edxSc_GetTaskName3: lodsb and al, al jz Sc_GetTaskName4 stosb inc edx loop Sc_GetTaskName3Sc_GetTaskName4: xor al,al stosb inc edx mov [ebp + s_task.r_ecx], edx jmp Int_ScheduleCurr_succ;------------------------------------------------------------------SysCall_KillTask: cmp [ebp + s_task.r_ecx], DWORD 4 jz Sc_KillTask0 mov eax, RESULT_INCORRECT_SYSCALL_PARAMS jmp Int_ScheduleCurr_errEaxSc_KillTask0: mov esi, [ebp + s_task.r_esi] add esi, [ebp + s_task.taskPageAddr] lodsd cmp eax, [ebp + s_task.taskID] jnz Sc_KillTask1 jmp Sc_Exit_Sc_KillTask1: push ebp call KillTask pop ebp jnc Sc_KillTask2 mov eax, RESULT_INVALID_TASKID jmp Int_ScheduleCurr_errEaxSc_KillTask2: mov eax, [ebp + s_task.taskID] call FindTask mov [currentTaskN], eax xor eax,eax jmp Int_ScheduleCurr_succEax;------------------------------------------------------------------SysCall_Exit: mov eax, [ebp + s_task.r_ecx] and eax, eax jz Sc_Exit_ mov eax, RESULT_INCORRECT_SYSCALL_PARAMS jmp Int_ScheduleCurr_errEaxSc_Exit_: mov eax, [ebp + s_task.taskID] call KillTask dec DWORD [currentTaskN] jmp Schedule;------------------------------------------------------------------dummy dd 0SysCall_CreateTask: mov ebx, [ebp + s_task.r_ecx] cmp ebx, krnl_CreateTask.msize + 1 jnc Sc_CreateTask0 mov eax, RESULT_INCORRECT_SYSCALL_PARAMS jmp Int_ScheduleCurr_errEaxSc_CreateTask0: mov esi, [ebp + s_task.r_esi] add esi, [ebp + s_task.taskPageAddr] mov ecx, [esi + krnl_CreateTask.stackSize] mov edx, [esi + krnl_CreateTask.dataSize] push eax ;; mov eax, [ebp + s_task.r_edi] ;; cmp eax, 0x12345678 ;; jnz gg1 ;; mov eax, 1 ;; mov [dummy], eax ;;gg1: pop eax ;; mov eax, esi add eax, krnl_CreateTask.taskCode sub ebx, krnl_CreateTask.taskCode push ebp call CreateTask pop ebp push eax ;; mov eax, [ebp + s_task.r_edi] ;; cmp eax, 0x12345678 ;; jnz gg ;; mov ax, 0x1111 ;; mov ds, ax ;;gg: pop eax ;; xor eax, eax jmp Int_ScheduleCurr_succEax
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -