请教高手:如何在module中访问sys_call_table

ATField 2003-02-20 07:57:58
帮同学作课程设计。要编写一个新的call

我按书上的做法,但是不行。请教了。
说说书上的做法:
(我是看的The Linux Kernel Module Programming Guide by Peter Jay Salzman and Ori Pomerantz。)

书上先定义
extern void *sys_call_table[];
然后说:the kernel will fill it up
我理解为insmod的时候会自动的使程序中的变量sys_call_table指向实际的sys_call_table
但是当我编译成功后输入:
insmod mysyscall.o
系统显示:
unresolve symbol sys_call_table.
请问这是怎么回事?如何解决?

...全文
178 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ATField 2003-02-23
  • 打赏
  • 举报
回复
help
ATField 2003-02-21
  • 打赏
  • 举报
回复
谢谢。
那么在没有sys_call_table的情况下,要如何修改系统调用的地址呢?

如果可以不用sys_call_table符号而改变系统调用的地址那就太好了。
解决后立刻给分。
tianxiangyuan 2003-02-21
  • 打赏
  • 举报
回复
你可以下载一个完整的linux内核源码,然后重新编译生成操作系统。
据说,在linux2.6.x中已经正式取消了sys_call_table符号。所以,关于这方面的内容已经没有太大的意义了。
ATField 2003-02-21
  • 打赏
  • 举报
回复
help
ATField 2003-02-20
  • 打赏
  • 举报
回复
不会吧!!!我正是用的Redhat Linux 8!
那么请问如何动手修改内核使之具有符号sys_call_table呢?
具体应该修改哪里呢?
tianxiangyuan 2003-02-20
  • 打赏
  • 举报
回复
如果你使用的是redhat linux 8.0的话,你很不幸,因为该内核将sys_call_table引出符号取消了!除非你自己动手将内核修改过来,否则不能修改sys_call_table内的内容。
ATField 2003-02-20
  • 打赏
  • 举报
回复
谢谢,但是我觉得unresolved external symbol就是说没有这个symbol,
和类型应该没有关系。如果类型不对的话就是type mismatch。
blh 2003-02-20
  • 打赏
  • 举报
回复
实时下面的形势
typedef int (*sysfun_p)(void);
extern sysfun_p sys_call_table[];

23,115

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧