Linux关于sys_call_table的使用

简介: Linux关于sys_call_table的使用

系统调用服务程序的地址存放在sys_call_table中,通过系统调用号定位到具体的系统调用地址,然后我们就可以通过编写内核模块来修改sys_call_table中的系统调用的地址来为我们自己定义的函数的地址,可以实现系统调用的拦截。但是我的版本不支持sys_call_table的导出,所以需要获得sys_call_table的地址,通过sudo cat /proc/kallsyms | grep sys_call_table

可以看出sys_call_table数组的首地址为0xffffffffb5c00300,权限为只读,所以我们还要修改它的权限。通过查阅可以知道,CR0的位16是写保护标志。当设置该标志时,处理器会禁止超级用户程序向用户级只读页面执行写操作;当该位复位时则反之,所以要将该位置0。由于最后要将CR0复原,因此利用了ret报存了cr0原来的值,最后调用asm volatile(“mov %%rax,%%cr0” ::“a”(val))将cr0复原。这里使用了volatile,表示不要对嵌入式汇编进行优化。

相关文章
|
15天前
|
运维 安全 Linux
Linux中传输文件文件夹的10个scp命令
【10月更文挑战第18天】本文详细介绍了10种利用scp命令在Linux系统中进行文件传输的方法,涵盖基础文件传输、使用密钥认证、复制整个目录、从远程主机复制文件、同时传输多个文件和目录、保持文件权限、跨多台远程主机传输、指定端口及显示传输进度等场景,旨在帮助用户在不同情况下高效安全地完成文件传输任务。
111 5
|
15天前
|
Linux
Linux系统之expr命令的基本使用
【10月更文挑战第18天】Linux系统之expr命令的基本使用
51 4
|
2天前
|
缓存 监控 Linux
|
5天前
|
Linux Shell 数据安全/隐私保护
|
6天前
|
域名解析 网络协议 安全
|
13天前
|
监控 Linux Shell
|
12天前
|
运维 监控 网络协议
|
16天前
|
Unix Linux
Linux | Rsync 命令:16 个实际示例(下)
Linux | Rsync 命令:16 个实际示例(下)
28 3
Linux | Rsync 命令:16 个实际示例(下)