32 lines
739 B
C
32 lines
739 B
C
#include "../include/syscall.h"
|
|
#include "../include/printf.h"
|
|
#include "../include/isr.h"
|
|
|
|
void syscall_handler(registers_t *regs){
|
|
if (regs->eax >= SYSCALL_NUM)
|
|
return;
|
|
|
|
void *location = NULL;//syscalls[regs->eax];
|
|
|
|
printf("Syscall Win: %08x\n",regs->eax);
|
|
|
|
int ret;
|
|
asm volatile (" \
|
|
push %1; \
|
|
push %2; \
|
|
push %3; \
|
|
push %4; \
|
|
push %5; \
|
|
call *%6; \
|
|
pop %%ebx; \
|
|
pop %%ebx; \
|
|
pop %%ebx; \
|
|
pop %%ebx; \
|
|
pop %%ebx; \
|
|
" : "=a" (ret) : "r" (regs->edi), "r" (regs->esi), "r" (regs->edx), "r" (regs->ecx), "r" (regs->ebx), "r" (location));
|
|
regs->eax = ret;
|
|
}
|
|
|
|
void syscall_install(){
|
|
register_interrupt_handler(0x80,syscall_handler);
|
|
} |