[摘要]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可加载内核模块编程完全向导