科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网服务器频道Linux2.6内核模块获取sys call table地址

Linux2.6内核模块获取sys call table地址

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文主要介绍在Linux 2.6版的内核中实现基地址修改的方法。所有代码我都在基于2.6.19版内核的Fedora Core 6上进行了测试。

作者:赛迪网 来源:赛迪网 2007年10月31日

关键字: 内核模块 Linux

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

    ZDNetChina服务器站 10月31日操作系统技巧  本文主要介绍在Linux 2.6版的内核中实现基地址修改的方法。所有代码我都在基于2.6.19版内核的Fedora Core 6上进行了测试。

    Linux 2.6版的内核出于安全的考虑没有将系统调用列表基地址的符号sys_call_table导出,但要对系统调用进行替换,却必须要获取该地址,于是就有了这篇文章。

    我在这里采用的基本思路是这样的,因为系统调用都是通过0x80中断来进行的,故可以通过查找0x80中断的处理程序来获得sys_call_table的地址。其基本步骤是,首先获取中断描述符表的地址,再从中查找0x80中断的服务例程,再搜索该例程的内存空间,以从其中获取sys_call_table的地址。其代码如下:

#include

#include
// 中断描述符表寄存器结构

struct {

unsigned short limit;

unsigned int base;

} __attribute__((packed)) idtr;

// 中断描述符表结构

struct {

unsigned short off1;

unsigned short sel;

unsigned char none, flags;

unsigned short off2;

} __attribute__((packed)) idt;

// 查找sys_call_table的地址

void disp_sys_call_table(void)

{

unsigned int sys_call_off;

unsigned int sys_call_table;

char* p;

int i;

// 获取中断描述符表寄存器的地址

asm("sidt %0":"=m"(idtr));

printk("addr of idtr: %x\n", &idtr);

// 获取0x80中断处理程序的地址

memcpy(&idt, idtr.base+8*0x80, sizeof(idt));

sys_call_off=((idt.off2<<16)|idt.off1);

printk("addr of idt 0x80: %x\n", sys_call_off);

// 从0x80中断服务例程中搜索sys_call_table的地址

p=sys_call_off;

for (i=0; i<100; i++)

{

if (p=='\xff' && p[i+1]=='\x14' && p[i+2]=='\x85')

{

sys_call_table=*(unsigned int*)(p+i+3);

printk("addr of sys_call_table: %x\n", sys_call_table);

return ;

}

}

}

// 模块载入时被调用

static int __init init_get_sys_call_table(void)

{

disp_sys_call_table();

return 0;

}

module_init(init_get_sys_call_table);

// 模块卸载时被调用

static void __exit exit_get_sys_call_table(void)

{

}

module_exit(exit_get_sys_call_table);

// 模块信息

MODULE_LICENSE("GPL2.0");

MODULE_AUTHOR("Xizhi Zhu");

在编译并载入该模块后,可以通过dmesg命令看到如下的输出:

addr of idtr: d0af4680

addr of idt 0x80: c0103e04

addr of sys_call_table: c03094c0

    可见,上面的程序能够获取sys_call_table的地址。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章