我正在为内核编程和内存管理类编写家庭作业。我需要动态获取sys_call_table地址并安装一个简单的钩子,该钩子sys_read在打印一些文本后立即调用原始的sys_call(在本例中为)。
首先,我对sys_call_table使用grep和/boot/System.map获得的地址进行了硬编码,并遵循了一些我在网上找到的代码示例:
https://gajastechnologies.blogspot.com/2016/12/basics-of-making-rootkit-from-syscall.html https://syprog.blogspot.com/2011/10/hijack-linux-system-calls-part-iii.html 这些帖子对sys_call_table地址有不同的看法,即一个使用单个指针,而另一个使用双指针。但是,在两种情况下,我都遇到lvalue required as left operand of assignment分配错误original_read = table[__NR_read];
我的错在哪里 较新的内核有什么变化吗?
您会注意到我留下了两种禁用内存只读保护的方法,它们都适用于更新的5.X 32位内核吗?
如何在代码内动态获取sys_call_table,该如何用作参考?我无法在较新版本的导出的sys_calls上找到信息。我发现sys_close经常使用它,但是编译器无法识别它,因此建议您使用它ksys_close。
original_read是一个功能。您不能分配给功能。例如,你不能printf = something;
似乎您打算original_read成为一个函数指针。要声明函数指针,需要额外的括号集:
asmlinkage long (*original_read)(unsigned int fd, char __user *buf, size_t count);
^ ^
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。