开发者社区> 问答> 正文

需要左值作为赋值的左操作数-函数指针

我正在为内核编程和内存管理类编写家庭作业。我需要动态获取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。

展开
收起
祖安文状元 2020-01-08 15:01:03 1211 0
1 条回答
写回答
取消 提交回答
  • original_read是一个功能。您不能分配给功能。例如,你不能printf = something;

    似乎您打算original_read成为一个函数指针。要声明函数指针,需要额外的括号集:

    asmlinkage long (*original_read)(unsigned int fd, char __user *buf, size_t count);
                        ^              ^
    
    2020-01-08 15:01:13
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
函数对象 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多