当前位置: 技术问答>linux和unix
LKM问题,动态查找sys_call_table相关
来源: 互联网 发布时间:2016-05-09
本文导语: 1. 在编写模块是每次insmod后都无法卸载模块,只能重启,网上说是因为编译内核时没有把卸载模块选项选中,我直接装的linux,没机会选阿,难道我要重新编译一次内核? 2. 我在2.6内核下调一个模块,大致这样:动...
1. 在编写模块是每次insmod后都无法卸载模块,只能重启,网上说是因为编译内核时没有把卸载模块选项选中,我直接装的linux,没机会选阿,难道我要重新编译一次内核?
2. 我在2.6内核下调一个模块,大致这样:动态查找系统调用表,然后替换其中的系统调用,不过每次insmod都是段错误,帮忙看看错在那里。。。
2. 我在2.6内核下调一个模块,大致这样:动态查找系统调用表,然后替换其中的系统调用,不过每次insmod都是段错误,帮忙看看错在那里。。。
#include
#include
#include
#include
unsigned long *sys_call_table = NULL;
//typedef int (*funcType)(const char*,int);
//funcType orig_mkdir;
asmlinkage int (*orig_mkdir)(const char*,int mode);
struct idt_tag
{
unsigned short offset_low,segment_select;
unsigned char reserved,flags;
unsigned short offset_high;
};
static unsigned long* getSyscallTable(void)
{
unsigned char idtr[6],*shell,*sort;
struct idt_tag *idt;
unsigned long system_call,sct;
unsigned short offset_low,offset_high;
char *p;
int i;
__asm__("sidt %0":"=m"(idtr));
idt = (struct idt_tag*)((*(unsigned long*)&idtr[2]) + 8 * 0x80);
offset_low = idt->offset_low;
offset_high = idt->offset_high;
system_call = (offset_high)
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!