LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1361|回复: 2

修改键盘中断向量(IRQ1)以截获失败,贴源码求助

[复制链接]
发表于 2006-3-23 20:30:17 | 显示全部楼层 |阅读模式
小弟近来想来测试中断响应时间,想出一个不太好的法子如下:通过修改键盘中断向量,使其指向截获模块,在此模块内得出系统时间,然后再转入原中断向量。另外通过加载自己的简间键盘驱动模块,在此模块内只得到系统时间后返回(同时禁掉原有模块)。但现在遇到了问题:在修改键盘中断向量时老出错,还望各位大侠帮忙看看,救急呀。
static unsigned long stub;
struct {
    unsigned short limit;
   unsigned long base;
}
struct descriptor-idt
{
   unsigned short offset_low,selector;
  unsigned char reserved,flag;
  unsigned short offset_high;
}*idte;
void intercept(void)
{
__asm__("rdtsc \n"
                 :"=a"(low),"=d"(high));
printk("<1>the time is %ld%ld",high,low);
__asm__("jmp *stub");
}
int init_module()
{
__asm__ ("sidt %0" :"=m"(idtr));
idte=(struct descriptor_idt *)(idtr.base+8*0x21);
stub=(idte->offset_high<<16|idte->offset_low);
idte->offset_high=(unsigned short)((unsigned long)intercept>>16);
idte->offset_low=(unsigned short)((unsigned long)intercept&0x0000ffff);
}
请教各位大哥出出主意呀,有条件的帮忙调试看看,不胜感激。(注,以上仅为修改中断向量部分)
另外发现通过这样得出的地址值与系统中System.map中的值有出入呀,不知为什么,比如得出system_call地址值为c010912c,但在system.map中地址值为c0109325。它们的值难道不会相等吗,不解!
 楼主| 发表于 2006-3-23 20:44:22 | 显示全部楼层
另外“玩转IDT”中采用了类似如下的形式:
void stub(void)
{
__asm__(".globl mystub \n"
               ".align 4,90 \n"
                  ".mystub: \n"
                  .......
                              );
然后在init_module中使用,
可gcc说mystub“未申明,什么第一次使用未定义吧”反正就是这一类的话,唉,不知这是为什么呀,有哪位大哥知道告诉小弟哟,还有在void stub(void)前加个asmlinkage,GCC就报错说void前有语法错误,这是怎么回事,大哥们帮忙呀,谢谢了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-24 15:14:19 | 显示全部楼层
把程序改写如下都不行呀,
void stub(void)
{
__asm__ volatile(
".align 4,90 \n\t"
"jmp *old_stub"
);
}
int init_module()
{
__asm__ ("sidt %0" :"=m"(idtr));
idte=(struct descriptor_idt *)(idtr.base+8*0x21);
old_stub=(idte->offset_high<<16|idte->offset_low);
idte->offset_high=(unsigned short)((unsigned long)stub>>16);
idte->offset_low=(unsigned short)((unsigned long)stub&0x0000ffff);
}
这样都不行呀,真是郁闷,我想这样做应该不会对内核桟造成影响吧,到底是哪错了呀,唉,唉,都改了好久了,有时加载后系统能接受一个按键输入显示,然后就死机,想来想去,是不是中断返回后出错呀,大牛们都哪去了呀!5555555555555555555
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表