c - Linux内核中的无效系统调用拦截
问题描述
我想使用开放系统调用的拦截。由于我的内核版本是 4.18,我应该从/boot文件夹中的System.map文件中获取系统调用表的地址。所以,
grep sys_call_table System.map-4.18.0-10-generic
给了我以下字符串:
ffffffff81e001c0 R sys_call_table
ffffffff81e015a0 R ia32_sys_call_table
我在我的代码中使用这个地址(来自第一个字符串),但insmod在 .ko 执行后返回“Killed”。
我不知道这件事,你的建议会对我有很大帮助!
unsigned long *sys_call_table = (unsigned long *)0xffffffff81e001c0;
asmlinkage int (*original_call) (const char *, int, int);
asmlinkage int our_sys_open(const char *filename, int flags, int mode)
{
int i = 0;
char ch;
do {
get_user(ch, filename + i);
i++;
printk("%c", ch);
} while (ch != 0);
printk("\n");
return original_call(filename, flags, mode);
}
int init_module()
{
original_call = (void *) sys_call_table[__NR_open];
sys_call_table[__NR_open] = (unsigned long) our_sys_open;
return 0;
}
void cleanup_module()
{
sys_call_table[__NR_open] = original_call;
}
MODULE_LICENSE("GPL");
解决方案
推荐阅读
- powershell - 测试路径在空文件夹上返回 true
- django - 了解 Django 多租户
- excel - 在 Excel 中,如何创建一个表格和图表来显示给定日期的任务数
- html - 使图像内联并在其下方设置用户名
- javascript - 如何为这个 p5 Javascript 草图创建一个工作菜单屏幕?
- bash - 如何从远程主机获取最近 10 分钟的日志
- php - Divi Builder(插件)不适用于 WordPress 5.0.2
- ruby-on-rails - Rails 应用程序加载错误,无法使用“rais s”命令启动应用程序,而是出现错误
- c# - 具有统一 2018.3 的 Android 运行时权限
- android - 联系人没有加载到我的列表视图android中