我在内核中运行了两个函数,函数 A 和函数 B。函数 A 清除屏幕并将控制权传递给函数 B(它目前什么都不做)。当控制权返回给功能 A 时,会发生三重故障。(这是 x86 Intel 语法)
功能A
function_a:
pop edx
push ebp
mov ebp, esp
sub esp, 8
push dword 0
pop eax
mov [ebp-4], eax
jmp .il_15
.il_7:
push dword 753664
mov eax, [ebp-4]
push eax
pop eax
pop ebx
add eax, ebx
push eax
push dword 0
pop eax
pop ebx
mov [ebx],al
mov eax, [ebp-4]
push eax
push dword 1
pop eax
pop ebx
add eax, ebx
push eax
pop eax
mov [ebp-4], eax
.il_15:
mov eax, [ebp-4]
push eax
push dword 4000
pop eax
pop ebx
cmp ebx, eax
jl .il_7
push dword 4
call function_b
jmp .methodend
.methodend:
add esp, 8
pop ebp
push edx
ret
功能 B
function_b:
pop edx
push ebp
mov ebp, esp
sub esp, 4
jmp .methodend ;This is just an empty function
.methodend:
add esp, 4
pop ebp
push edx
ret
我很确定我已经为每个函数正确设置了堆栈(弹出返回值、推送 ebp 等),所以我不确定是什么导致了崩溃