当前位置:  技术问答>linux和unix

拦截系统调用的几个问题

    来源: 互联网  发布时间:2015-01-15

    本文导语:  在 Linux 下面如何截获系统调用  用Linux Kernel Module的一般目的就是扩展系统的功能,或者给某些特殊的设备提供驱动等等。其实利用Linux  内核模块我们还可以做一些比较“黑客”的事情,例如用来拦截系统调用,然后自己...


在 Linux 下面如何截获系统调用 

用Linux Kernel Module的一般目的就是扩展系统的功能,或者给某些特殊的设备提供驱动等等。其实利用Linux 
内核模块我们还可以做一些比较“黑客”的事情,例如用来拦截系统调用,然后自己处理。 
下面给出一个简单的例子,说明了其基本的工作过程。 

#define MODULE 
#define __KERNEL__ 
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
extern void* sys_call_table[]; /*sys_call_table is exported, so we can access it*/ 
int (*orig_mkdir)(const char *path); /*the original systemcall*/ 
int hacked_mkdir(const char *path) 

return 0; /*everything is ok, but he new systemcall does nothing*/ 

int init_module(void) /*module setup*/ 

orig_mkdir=sys_call_table[SYS_mkdir]; 
sys_call_table[SYS_mkdir]=hacked_mkdir; 
return 0; 

void cleanup_module(void) /*module shutdown*/ 

sys_call_table[SYS_mkdir]=orig_mkdir; /*set mkdir syscall to the origal one*/ 

我不明白的地方是,实际上系统调用最终都是通过软中断服务int 0x80来实现的,而程序中只声明一个外部变量extern void* sys_call_table[]就能修改系统调用入口呢?它修改的是不是动态连接库的系统调用,也就是说如果在另外一个程序中使用静态连接库,就不会被拦截了,是吗?我认为更可靠的做法是直接修改int 0x80处的子功能入口地址,我的意思是用sidt指令取得中断描述符表地址,然后。。。。请问我的想法对吗? 


 

|
软中断int 0x80发生时,在6个通用寄存器中已经保存好了关于本次系统调用的参数和系统调用号。然后通过系统调用号在sys_call_table[]中查找相应的系统调用服务例程。通过你上面的程序也可以看出,sys_call_table[]中保留的是系统调用例程的入口地址。所以,不论程序中使用的是静态连接库还是动态链接库,其系统调用的过程是一样的。
另外,通过sitd指令修改中断描述表当然可以,但是没有必要这样做。

|
[bash]$ more /proc/ksyms | grep sys_call_table
c023e13c sys_call_table_Rdfdb18bd
内核中有一个输出符号的功能,内核模块可以不用和内核一起编译即可使用别的模块输出的符号,模块在编译的时候并没有把外部符号比如sys_call_table连接到模块中,而是在加载insmod过程中连接的,即使用符号在内核中的地址来代替符号名,内核中有一个内核符号输出表来保存各个模块、内核输出的符号地址

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • [问题]关于linux下拦截数据包并予以修改的问题(相当win下HOOKapi拦截封包)
  • 美军陆基中段反导拦截试验失败
  • 如何在UNIX/LINUX下实现数据包拦截?
  • SQL 语句拦截 P6SPY
  • 在交换机环境的以太网拦截数据包要怎么考虑哦?能不能给点帮助啊??
  • 获取QQ空间被拦截的访客 Qvisitor
  • Linux有拦截器机制么?
  • jquery 绑定、捕获、拦截回车事件的例子
  • 同一网站之间如何通过iptables拦截
  • java拦截/调试/安全测试工具 JavaSnoop
  • 键盘被拦截, 如何使用GDB调试
  • 大家能不能给一个能在交换机环境下拦截数据包得程序啊,谢谢了。
  • c#拦截关机注销消息的实现代码
  • 请教达人:如何不改内核在linux的应用程序层实现键盘拦截功能。
  • Android拦截外拨电话程序示例
  • WinForm实现拦截窗体上各个部位的点击特效实例
  • c#钩子本线程内消息拦截的方法
  • java Struts2 在拦截器里的跳转问题
  • android短信拦截的实现代码
  • winform拦截关闭按钮触发的事件示例


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3