免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1841 | 回复: 3

内核2.6.28下获取sys_call_table的问题 [复制链接]

论坛徽章:
0
发表于 2009-05-26 10:43 |显示全部楼层
问题1:
在2.6.24和2.6.28内核下,使用下面函数获取到的sys_call_table与System.map中的不一致,而与/proc/kallsyms一致。

grep sys_call_table /proc/kallsysms
c04ed700 R sys_call_table

grep sys_call_table /usr/src/linux-2.6.28.7/System.map
c12ed700 R sys_call_table

获取sys_call_table的函数如下:
unsigned int get_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: 0x%x\n", (unsigned int)&idtr);

memcpy(&idt, (void *)(idtr.base+8*0x80), sizeof(idt));
sys_call_off=((idt.off2<<16)|idt.off1);
printk("addr of idt 0x80: 0x%x\n", sys_call_off);

p=(char *)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: 0x%x\n", sys_call_table);
return sys_call_table;
}
}
return 0;
}
使用该函数获取的sys_call_table地址为c04ed700

问题2:在linux 2.6.28内核下,使用上面get_sys_call_table获取的sys_call_table地址时,在下面的语句出现oops:
sys_call_table[__NR_test_syscall] = (long)test_syscall;
在2.6.24下,工作正常

请问有人遇到该情况吗?如何解决的?
谢谢!

论坛徽章:
0
发表于 2009-05-26 15:28 |显示全部楼层
这玩意你去内核版问赛

论坛徽章:
0
发表于 2009-05-26 15:42 |显示全部楼层
检查你的 uname -p
我记得这个特征串是x86 32位的

论坛徽章:
0
发表于 2009-05-26 16:08 |显示全部楼层
i686
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP