call_mem.s
来自「虚地址空间基于文件OS内核源代码和文件」· S 代码 · 共 79 行
S
79 行
.global memory_call_interruption_routine,call_device_driver,reload_cr3
memory_call_interruption_routine:
pushl %ebp
movl %gs,%ebp
pushl %ebp
movl %fs,%ebp
pushl %ebp
movl %es,%ebp
pushl %ebp
movl %ds,%ebp
pushl %ebp
movl %ss,%ebp
movl %ebp,%ds
movl %ebp,%es
movl %ebp,%fs
movl %ebp,%gs
pushl %ebp
pushl %edi
pushl %esi
pushl %edx
pushl %ecx
pushl %ebx
pushl %eax
pushl %esp
call memory_call_process
pushl %eax
cmpl $(0x00),reload_cr3_flag
je 1f
movl $(0x00),reload_cr3_flag
movl %cr3,%eax
movl %eax,%cr3
1:
popl %eax
popl %ebx
popl %ebx
popl %ebx
popl %ecx
popl %edx
popl %esi
popl %edi
popl %ebp
popl %ebp
movl %ebp,%ds
popl %ebp
movl %ebp,%es
popl %ebp
movl %ebp,%fs
popl %ebp
movl %ebp,%gs
popl %ebp
iret
call_device_driver:
movl %esp,%ebx
movl 0x08(%ebx),%esp
addl $(0xffc),%esp
pushfl
sti
pushl %ebx
pushl 0x08(%ebx)
call *0x04(%ebx)
popl %ebx
popl %ebx
popfl
movl %ebx,%esp
ret
reload_cr3:
movl %cr3,%eax
movl %eax,%cr3
ret
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?