Kernel module 带有系统调用的AIX内核扩展
根据此处的文档: 我们已经实现了一个内核扩展和一个加载程序,它定义并使用一个新的系统调用 加载程序中的用法如下所示:Kernel module 带有系统调用的AIX内核扩展,kernel-module,aix,Kernel Module,Aix,根据此处的文档: 我们已经实现了一个内核扩展和一个加载程序,它定义并使用一个新的系统调用 加载程序中的用法如下所示: static size_t dtGetNumInterceptions() { void *libHandle = NULL; size_t (*ke_syscall)(void)=NULL; libHandle = dlopen( loadedExtension, RTLD_NOW|RTLD_MEMBER|RTLD_GLOBAL
static size_t dtGetNumInterceptions() {
void *libHandle = NULL;
size_t (*ke_syscall)(void)=NULL;
libHandle = dlopen( loadedExtension, RTLD_NOW|RTLD_MEMBER|RTLD_GLOBAL );
if( libHandle ) {
ke_syscall = dlsym(libHandle, "dtGetNumInterceptions");
if( ke_syscall ) {
return ke_syscall();
}
}
return (size_t)-1;
}
与使用导出和导入文件实现的另一个测试应用程序相比,此函数返回的结果不好
臭虫在哪里
提前谢谢
Martin代码中有3个分支可能返回“坏结果”:1。失败的
dlopen
2。失败dlsym
。3.失败的ke_系统调用
。那么,到底是哪一个失败了?对不起,我必须澄清一下。坏结果意味着错误的号码。内核扩展截取一个系统调用,这个新的系统调用返回截取的次数。这是一个非常简单的单行函数,用于返回计数器的值。当我通过导出表以正常方式调用此函数时,我得到了正确的结果。当我以这种方式调用函数时,结果得到0。显然,采用这种方式的函数有自己的地址空间。请引用(或链接)完整的程序;我知道你在没有专业知识的情况下做了一件非常危险的事,这是不可能的。问题是,是否有可能在一个主要任务是加载和卸载内核扩展的程序中执行对真实内核扩展实例的系统调用。您可能想阅读以下内容: