系统调用命名规则:sys_XXX,XXX为提供给应用层的系统调用名,如getpid。
已注册的系统调用保存在系统调用表sys_call_table(entry.s)中
linux系统调用使用int 0x80软中断来实现,执行128号中断处理程序system_call,eax中为系统调用号,
该函数执行:call *sys_call_table(, %eax, 4)
自己添加系统调用时必须谨慎使用用户空间的指针,并且保证系统调用是可重入的,具体步骤:P49
copy_from_user(buf, src, len)
copy_to_user(dst, buf, len);
src->buf->dst;
直接访问系统调用:使用_syscalln()宏,n为0-6表示系统调用的参数个数
例如:long open(const char *filename, int flags, int mode);
#define NR_open 5(asm/unistd.h)
使用_syscalln宏:_syscall3(long, open, const *char , filename, int, flags, int, mode);
《linux内核设计与实现》阅读笔记 第四章 系统调用
最新推荐文章于 2024-09-30 09:51:27 发布