Chinaunix首页 | 论坛 | 博客
  • 博客访问: 69139
  • 博文数量: 11
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 120
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-06 15:04
文章分类
文章存档

2018年(11)

我的朋友

分类: LINUX

2018-03-11 16:28:00

在LSM钩子中获取到linux_binprm结构,从中获取到命令行参数。

点击(此处)折叠或打开

  1. static int get_argv_from_bprm(struct linux_binprm *bprm)
  2. {
  3.     int ret = 0;
  4.     unsigned long offset, pos;
  5.     char *kaddr;
  6.     struct page *page;
  7.     char argv[PAGE_SIZE] = {0};
  8.     int i = 0;
  9.     int argc = 0;
  10.     int count = 0;
  11.     if (!bprm)
  12.         return 0;

  13.     argc = bprm->argc;
  14.     
  15.     pos = bprm->p;
  16.     do {
  17.         offset = pos & ~PAGE_MASK;
  18.         page = get_arg_page(bprm, pos, 0);
  19.         if (!page) {
  20.             ret = 0;
  21.             goto out;
  22.         }
  23.         kaddr = kmap_atomic(page);

  24.         for (i = 0; offset < PAGE_SIZE && count < argc && i < PAGE_SIZE; offset++, pos++) {
  25.             if (kaddr[offset] == '\0') {
  26.                 count++;
  27.                 pos++;
  28.                 printk("argv is %s\n", argv);
  29.                 memset(argv, 0, sizeof(argv));
  30.                 i = 0;
  31.                 continue;
  32.             }
  33.             argv[i] = kaddr[offset];
  34.             i++;
  35.         }
  36.         
  37.         kunmap_atomic(kaddr);
  38.         put_arg_page(page);
  39.     } while (offset == PAGE_SIZE);

  40.     ret = 0;

  41. out:
  42.     return ret;
  43. }

阅读(3930) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~