怎么在ubuntu上编个程序完成系统调用并修改一下内核

高分请教下,怎么在ubuntu上编个程序完成系统调用并修改一下内核
最新回答
你若安好那还得了

2024-09-16 17:16:37

你可以修改内核源代码,比如添加个系统调用:

kernel/sys.c:
SYSCALL_DEFINE0(hello) {
    printk(KERN_EMERG "hello\n");
    return 123456;
}

然后再注册一下:

include/linux/syscalls.h:
asmlinkage long sys_hello(void);

arch/x86/syscalls/syscall_64.tbl:
1025    64    hello sys_hello

编译下内核,安装并重新启动就可以使用这个系统调用了:(用syscall()或者嵌入汇编都可以)

#include <stdio.h>
int main () {
     //int a = syscall (1025); 
     long a=97;
     asm ( 
          "movq $0x0401, %%rax\n"
          "syscall\n"
          "movq %%rax, %0\n"
          : "=r"(a)
     ); 
     printf ("%d\n", a);
     return 0;
}


(以上代码在内核版本3.12.5 x86_64上通过)

梦幻樱雪

2024-09-16 21:00:31

修改内核?说明白点