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