www.pudn.com > LFYOS.zip > call_mem.s
.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