嵌入的kpm模块不生效 #1058
Unanswered
ndl1302732
asked this question in
Q&A
嵌入的kpm模块不生效
#1058
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
我有个一个简单的kpm模块。开发完成后,在Apatch管理器里面,加载它,能正常执行。
使用dmesg -w能看到正常的日志输出。
我想把这个模块持久化,因为加载方式执行,每次重启后需要手动再次加载。
我尝试在内核模块界面执行:
嵌入-》嵌入模块-》选择我的模块-》开始修补。
修补完成后,Apatch的输出信息提示我需要重启以完成安装,然后我点击重启。
重启成功,正常开机。但是我使用dmesg -w去看日志,看不到我想要的日志。
是我对嵌入模块理解有误吗?
我理解的是:嵌入模块就是把模块打包到内核里面,不需要每次去加载了。
如果我的理解没错,是不是应该看到日志输出?
我的代码非常简单,仅仅hook openat这个syscall。代码如下:
KPM_NAME("MyDemo");
KPM_VERSION("1.0.0");
KPM_LICENSE("GPL v2");
KPM_AUTHOR("bob");
KPM_DESCRIPTION("Test Kpm Module");
enum hook_type hook_type = NONE;
void before_openat_1(hook_fargs4_t *args, void *udata)
{
logkd("call before_openat_1");
}
static long syscall_hook_demo_init(const char *args, const char *event, void *__user reserved)
{
hook_err_t err = HOOK_NO_ERR;
err = fp_hook_syscalln(__NR_openat, 4, before_openat_1, 0, 0);
if (err) {
logkd("hook __NR_openat error: %d\n", err);
} else {
logkd("hook __NR_openat success\n");
hook_type = FUNCTION_POINTER_CHAIN;
}
return 0;
}
static long syscall_hook_control0(const char *args, char *__user out_msg, int outlen)
{
logkd("syscall_hook control, args: %s\n", args);
return 0;
}
static long syscall_hook_demo_exit(void *__user reserved)
{
if(hook_type == FUNCTION_POINTER_CHAIN){
fp_unhook_syscalln(__NR_openat, before_openat_1, 0);
logkd("unhook __NR_openat");
}
return 0;
}
KPM_INIT(syscall_hook_demo_init);
KPM_CTL0(syscall_hook_control0);
KPM_EXIT(syscall_hook_demo_exit);
Beta Was this translation helpful? Give feedback.
All reactions