盾怪网教程:是一个免费提供流行杀毒软件教程、在线学习分享的学习平台!

OpenBSD可加载内核模块编程完全向导

时间:2024/10/30作者:未知来源:盾怪网教程人气:

[摘要]tail -2 hi! DDB symbols added: 150060 bytes # 好,现在让我们来看一个测试我们刚才新的系统调用的简单程序(calltest.c): #include &l...
tail -2
hi!
DDB symbols added: 150060 bytes
#

好,现在让我们来看一个测试我们刚才新的系统调用的简单程序(calltest.c):
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <err.h>
#include <sys/lkm.h>
#include <sys/ioctl.h>
#include <sys/syscall.h>

int
main(argc, argv)
  int argc;
  char **argv;
{
  int error, fd;
  struct lmc_stat modstat;

  if (argc != 3)
  erro(1, "%s", argv[0]);

  modstat.name = "ourcall";
 
  fd = open("/dev/lkm", O_RDONLY);
  if (fd == -1)
  err(1, "open");

  error = ioctl(fd, LMSTAT, &modstat);
  if (error == -1)
  err(1, "ioctl");

  printf("syscall no: %lun", modstat.offset);

  error = syscall(modstat.offset, atoi(argv[1]), argv[2]);
  if (error == -1)
  err(1, "syscall");
 
  exit(0);
}

注意我们是怎么从module的modstat结构来利用ioctl调用获得syscall的偏移量的.一般的用户权限是不允许访问/dev/lkm设备的,同样,

我们也可以从modstat来获得象以上那
样的信息.
所以我们的程序需要一个整数和字符串参数提交给新系统调用,好,编译运行我们的程序:

# cc -o calltest calltest.c
# ./calltest 4 beers
syscall no: 210
# dmesg

关键词:OpenBSD可加载内核模块编程完全向导




Copyright © 2012-2018 盾怪网教程(http://www.dunguai.com) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版