加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

在Linux 3.x上挂钩sys_execve()

发布时间:2020-12-13 22:51:24 所属栏目:Linux 来源:网络整理
导读:我试图通过修改系统调用表来挂钩 Linux 3.x内核上的sys_execve()函数.问题是sys_execve()只应在执行失败时返回错误代码.使用我正在使用的包装器函数(见下文),当在有效的可执行文件上调用sys_execve()时,它执行正常并且一切正常.但是,当调用不存在的文件或导
我试图通过修改系统调用表来挂钩 Linux 3.x内核上的sys_execve()函数.问题是sys_execve()只应在执行失败时返回错误代码.使用我正在使用的包装器函数(见下文),当在有效的可执行文件上调用sys_execve()时,它执行正常并且一切正常.但是,当调用不存在的文件或导致错误情况的其他内容时,调用程序将崩溃:

segfault at 3b ip 000000000000003b...

使用strace检查钩子sys_execve()的返回值显示-1或ENOSYS而不是正确的错误代码,这让我感到困惑,因为我已经检查了我的包装器函数的程序集以及sys_execve()的Linux源代码.有关为什么我的包装器没有正确传递错误代码的任何建议?

asmlinkage long new_execve(const char* name,const char const** argv,const char const** envp,struct pt_regs* regs) {
    return orig_func(name,argv,envp,regs);
}

解决方法

你不能通过修改系统调用表来挂钩execve,就像在x86_64上从stub_execve调用sys_execve一样.所以调用链是sys_call_table [NR_execve] – > stub_execve – > sys_execve – > do_execve …在LXR上查看 stub_execve.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读