📄 call.s
字号:
.global call_os_kernel,call_memory_manager,check_point_routine
call_os_kernel:
pushl %ebp
movl 0x08(%esp),%ebp
movl 0x00(%ebp),%eax
movl 0x04(%ebp),%ebx
movl 0x08(%ebp),%ecx
movl 0x0c(%ebp),%edx
movl 0x10(%ebp),%esi
movl 0x14(%ebp),%edi
movl 0x18(%ebp),%ebp
cmpl $(0x06),%eax
jne 2f
int $(0x80)
movl %eax,%esi
andl $(0x80000000),%esi
jne 3f
cmpl $(0x00),%ebx
je 3f
movl %edx,%esp
call *%ecx
1:
movl $(0x03),%eax
movl $(0x01),%ebx
int $(0x80)
jmp 1b
2:
int $(0x80)
3:
movl 0x08(%esp),%ebp
movl %eax,0x00(%ebp)
movl %ebx,0x04(%ebp)
movl %ecx,0x08(%ebp)
movl %edx,0x0c(%ebp)
movl %esi,0x10(%ebp)
movl %edi,0x14(%ebp)
popl %ebp
ret
call_memory_manager:
pushl %ebp
movl 0x08(%esp),%ebp
movl 0x00(%ebp),%eax
movl 0x04(%ebp),%ebx
movl 0x08(%ebp),%ecx
movl 0x0c(%ebp),%edx
movl 0x10(%ebp),%esi
movl 0x14(%ebp),%edi
movl 0x18(%ebp),%ebp
int $(0x81)
movl 0x08(%esp),%ebp
movl %eax,0x00(%ebp)
movl %ebx,0x04(%ebp)
movl %ecx,0x08(%ebp)
movl %edx,0x0c(%ebp)
movl %esi,0x10(%ebp)
movl %edi,0x14(%ebp)
popl %ebp
ret
check_point_routine:
movl $(0x00),%eax
movl $(0x00),%ebx
movl $(0x00),%ecx
int $(0x80)
pushl %eax
andl $(0x80000000),%eax
cmpl $(0x00),%eax
jne migration_fail
cmpl $(0x00),%ecx
jne caller
popl %eax
callee:
movl 0x08(%esp),%eax
movl 0x0c(%esp),%ebx
pushl %ebx
call *%eax
popl %ebx
1:
movl $(0x03),%eax
movl $(0x01),%ebx
movl $(0x01),%ecx
int $(0x80)
jmp 1b
caller:
migration_fail:
movl 0x08(%esp),%eax
movl %ebx,(%eax)
popl %eax
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -