当前位置: 技术问答>linux和unix
一个关于LKM的简单问题
来源: 互联网 发布时间:2015-04-25
本文导语: 各位大侠,小弟在Linux8.0(kernel 2.4.18-14)上写LKM程序。 但无法取得sys_call_table[],装载时提示为sys_call_table没有找到。 但在Linux7.3(kernel 2.4.18-3)上可以运行。 请各位指点指点,谢谢· | kernel2.4.1...
各位大侠,小弟在Linux8.0(kernel 2.4.18-14)上写LKM程序。
但无法取得sys_call_table[],装载时提示为sys_call_table没有找到。
但在Linux7.3(kernel 2.4.18-3)上可以运行。
请各位指点指点,谢谢·
但无法取得sys_call_table[],装载时提示为sys_call_table没有找到。
但在Linux7.3(kernel 2.4.18-3)上可以运行。
请各位指点指点,谢谢·
|
kernel2.4.18以上的版本没有引出sys_call_table,
你可以去Linux伊甸园的论坛看看,那里的斑竹有介绍这个问题!
你可以去Linux伊甸园的论坛看看,那里的斑竹有介绍这个问题!
|
http://www.qiker.org/jiaocheng/xfocus/%B1%E0%B3%CC%BC%BC%CA%F5/340.html
不错的文章
不错的文章
|
朋友,我们能否共同探讨一下:
我用模块方式给系统添加一个自己定义的系统调用,模块加载进去没问题,可是用一个
用户测试程序测试,它不去执行我的系统调用函数,没有陷入内核中去执行我的系统调用
函数.下面是我的程序.你能否也把你的程序贴出来.希望能和你共同研究这个问题.
#include
#include
#include
#define __NR_pedagogictime 260
_syscall1(int,pedagogictime,struct timeval *,thetime)
int main()
{
struct timeval tv;
pedagogictime(&tv);
printf("tv_sec: %ldn",tv.tv_sec);
printf("tv_usec: %ldn",tv.tv_usec);
printf("em... let me sleep for s seconds!n");
printf("current uid is %ldn",getuid());
sleep(2);
}
#define MODULE
#define __KERNEL__
#define LINUX
#include
#include
#include
#include
#include
#include
#include
#define __NR_pedagogictime 260
#define SCT 0xc030a0f0/*System.map中找到的*/
static int (*anything_saved)(void);
static int sys_pedagogictime(struct timeval *tv)
{
struct timeval ktv;
MOD_INC_USE_COUNT;
do_gettimeofday(&ktv);
if(copy_to_user(tv,&ktv,sizeof(ktv))){
MOD_DEC_USE_COUNT;
return -EFAULT;
}
printk("Pid %ld called sys_gettimeofday().n",(long)current->pid);
MOD_DEC_USE_COUNT;
return 0;
}
int __init init_addsyscall(void)
{
long *sys_call_table;
sys_call_table=(long *)SCT;
anything_saved=(int(*)(void))(sys_call_table[__NR_pedagogictime]);
sys_call_table[__NR_pedagogictime]=(unsigned long)sys_pedagogictime;
return 0;
}
我用模块方式给系统添加一个自己定义的系统调用,模块加载进去没问题,可是用一个
用户测试程序测试,它不去执行我的系统调用函数,没有陷入内核中去执行我的系统调用
函数.下面是我的程序.你能否也把你的程序贴出来.希望能和你共同研究这个问题.
#include
#include
#include
#define __NR_pedagogictime 260
_syscall1(int,pedagogictime,struct timeval *,thetime)
int main()
{
struct timeval tv;
pedagogictime(&tv);
printf("tv_sec: %ldn",tv.tv_sec);
printf("tv_usec: %ldn",tv.tv_usec);
printf("em... let me sleep for s seconds!n");
printf("current uid is %ldn",getuid());
sleep(2);
}
#define MODULE
#define __KERNEL__
#define LINUX
#include
#include
#include
#include
#include
#include
#include
#define __NR_pedagogictime 260
#define SCT 0xc030a0f0/*System.map中找到的*/
static int (*anything_saved)(void);
static int sys_pedagogictime(struct timeval *tv)
{
struct timeval ktv;
MOD_INC_USE_COUNT;
do_gettimeofday(&ktv);
if(copy_to_user(tv,&ktv,sizeof(ktv))){
MOD_DEC_USE_COUNT;
return -EFAULT;
}
printk("Pid %ld called sys_gettimeofday().n",(long)current->pid);
MOD_DEC_USE_COUNT;
return 0;
}
int __init init_addsyscall(void)
{
long *sys_call_table;
sys_call_table=(long *)SCT;
anything_saved=(int(*)(void))(sys_call_table[__NR_pedagogictime]);
sys_call_table[__NR_pedagogictime]=(unsigned long)sys_pedagogictime;
return 0;
}