首页 / 操作系统 / Linux / Android 中用内核模块实现系统调用(Implement system call by kernel module in Android)
给学生设计实验,要在Android中实现一个系统调用,不停的调试烧写太费时间,所以想到了用内核模块来实现系统调用,方法如下:在System.map中找到sys_call_table的地址,然后后用如下代码直接进行系统调用:#include<linux/kernel.h>
#include<linux/module.h>
#include<linux/sched.h>
#include<asm/uaccess.h>
#include<linux/compiler.h>
#include<linux/linkage.h>
#include<linux/types.h>
#include<linux/unistd.h>#define __NR_memboundary 378
#define SYS_CALL_TB 0xc000e5a8 //sys_call_table地址unsigned long *sys_call_table = (unsigned long*)SYS_CALL_TB;asmlinkage long sys_memboundary(void){
printk(KERN_ALERT"===============The syscall print out!!!!
");
return 0;
}int __init init_addsyscall(void)
{
// sys_call_table = (unsigned long *)sys_call_table_address;
sys_call_table[__NR_memboundary] = (unsigned long)sys_memboundary;
printk("@@@@@@@System call module loaded
");
return 0;
}void __exit exit_addsyscall(void)
{
printk("@@@@@@@System call unlodaded
");
}module_init(init_addsyscall);
module_exit(exit_addsyscall);
MODULE_LICENSE("GPL");
~ 更多Android相关信息见Android 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=11