|
小弟近来想来测试中断响应时间,想出一个不太好的法子如下:通过修改键盘中断向量,使其指向截获模块,在此模块内得出系统时间,然后再转入原中断向量。另外通过加载自己的简间键盘驱动模块,在此模块内只得到系统时间后返回(同时禁掉原有模块)。但现在遇到了问题:在修改键盘中断向量时老出错,还望各位大侠帮忙看看,救急呀。
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。它们的值难道不会相等吗,不解! |
|