当前位置: 技术问答>linux和unix
请问linux中的系统调用号是如何跟系统调用表对应起来的
来源: 互联网 发布时间:2016-09-02
本文导语: 我看syscall_table_32.S中的.long sys_abc所在的行数 跟 sys_abc的系统调用号并一是一致的,请问是如何同多系统调用号找到对应的表项的? 谢谢了。 | .long sys_abc所在的sys_call_table,他就相当于一...
我看syscall_table_32.S中的.long sys_abc所在的行数 跟 sys_abc的系统调用号并一是一致的,请问是如何同多系统调用号找到对应的表项的?
谢谢了。
谢谢了。
|
.long sys_abc所在的sys_call_table,他就相当于一个 函数指针数组;或者说,是个跳转表,这个表中存储的是一系列的函数指针。
系统调用号就是这个数组的索引。通过一个sys_call_table这个基地址,加上系统调用号这个索引(偏移量),就可以找到这个号对应的函数入口。
系统调用号就是这个数组的索引。通过一个sys_call_table这个基地址,加上系统调用号这个索引(偏移量),就可以找到这个号对应的函数入口。
|
ENTRY(sys_call_table)
.long sys_restart_syscall /* 0 - old "setup()" system call, used for restarting */
.long sys_exit
.long ptregs_fork
.long sys_read
......
相当于c语言的
sys_call_table[] = { sys_restart_syscall, sys_exit, ptregs_fork, sys_read, ...... };
比如要执行系统调用3号,那就会调用sys_call_table[3],也就是sys_read
.long sys_restart_syscall /* 0 - old "setup()" system call, used for restarting */
.long sys_exit
.long ptregs_fork
.long sys_read
......
相当于c语言的
sys_call_table[] = { sys_restart_syscall, sys_exit, ptregs_fork, sys_read, ...... };
比如要执行系统调用3号,那就会调用sys_call_table[3],也就是sys_read