gonna ask tsoding for help, fuck this shit

This commit is contained in:
2025-05-20 00:10:37 +03:00
parent bc0bd99f95
commit b8752ee39d
4 changed files with 39 additions and 48 deletions
+15 -19
View File
@@ -16,39 +16,33 @@ extern current
extern trapret
switchProcess:
; Сохраняем регистры текущего процесса
mov eax, [esp + 4] ; eax = old
mov edx, [esp + 8] ; edx = new
push ebp
push ebx
push esi
push edi
push ebp
; Сохраняем указатель стека в current->context
mov edi, [current]
mov [edi + 12], esp ; PCB.CONTEXT находится по смещению 12
mov [eax+4], esp
mov esp, [edx+4]
; Загружаем следующий процесс
mov esi, [esp + 20] ; next (первый аргумент)
mov [current], esi
mov esp, [esi + 12] ; Загружаем esp из next->context
;mov eax, [edx+12]
;sub eax, 0xC0000000
;mov cr3, eax
; Восстанавливаем регистры
pop ebp
pop edi
pop esi
pop ebx
pop ebp
; Проверяем ring процесса
mov eax, [esi + 20] ; PCB.RING находится по смещению 20
cmp eax, 3
je .ring3
sti
ret ; Для ring 0 просто возвращаемся
.ring3:
jmp trapret ; Для ring 3 переходим через trapret
trapret:
; Восстанавливаем общие регистры из trap frame
popal ; edi, esi, ebp, oesp, ebx, edx, ecx, eax
;popal ; edi, esi, ebp, oesp, ebx, edx, ecx, eax
; Восстанавливаем сегментные регистры
pop gs
@@ -56,6 +50,8 @@ trapret:
pop es
pop ds
popad
; Пропускаем trapno и err
add esp, 8 ; trapno (4 байта) + err (4 байта)