Linux内核网络协议栈2-socket从库函数到内核
来源:互联网 发布:苹果mac下载软件怎么弄 编辑:程序博客网 时间:2024/04/28 16:34
一、socket()库函数到系统调用,再到内核
1、Linux运行的C库是glibc;
2、socket()调用如下:
1) socket()->__socket():glibc-2.3.6/sysdept/generic/socket.c (weak_alias(name1, name2))
2) __socket():glibc-2.3.6/sysdept/unix/sysv/linux/i386/socket.S
3) ENTER_KERNEL:这里,
SYS_ify宏定义为:glibc-2.3.6/sysdept/unix/sysv/linux/i386/Sysdept.hP宏定义为:glibc-2.3.6/sysdept/unix/sysv/linux/i386/socket.S其中,##为连接符号;因此,中断号是102,子中断号是1;
4) int 0x80进入内核:glibc-2.3.6/sysdept/unix/sysv/linux/i386/Sysdept.h:5) system_call中断入口:kernel/arch/x86/kernel/entry_32.S:6) 进入中断向量表:kernel/arch/x86/kernel/syscall_table_32.S中的102号中断:7) 进入sys_socketcall()函数,根据子中断号以决定走哪个分支:kernel/net/Socket.c:二、socket其他库函数(bind, accept...)
1、对于其他库函数,都是引用上面提到的glibc-2.3.6/sysdept/unix/sysv/linux/i386/socket.S来实现的,如
a) bind.S:b) accept.S:在各个库函数调用中,设置不同的参数,如socket(用于设置子中断号), NARGS(系统调用的参数个数)等,最终由
C代码
movl $P(SOCKOP_,socket), %ebx /* Subcode is first arg to syscall. */
来生成最终的子中断号,然后放到ebx寄存器中;
2、所有socket系统调用的子中断号参见glibc-2.3.6/sysdept/unix/sysv/linux/Socketcall.h:系列文章,请参考我在iteye的blog:http://diecui1202.iteye.com
1、Linux运行的C库是glibc;
2、socket()调用如下:
1) socket()->__socket():glibc-2.3.6/sysdept/generic/socket.c (weak_alias(name1, name2))
2) __socket():glibc-2.3.6/sysdept/unix/sysv/linux/i386/socket.S
3) ENTER_KERNEL:这里,
SYS_ify宏定义为:glibc-2.3.6/sysdept/unix/sysv/linux/i386/Sysdept.hP宏定义为:glibc-2.3.6/sysdept/unix/sysv/linux/i386/socket.S其中,##为连接符号;因此,中断号是102,子中断号是1;
4) int 0x80进入内核:glibc-2.3.6/sysdept/unix/sysv/linux/i386/Sysdept.h:5) system_call中断入口:kernel/arch/x86/kernel/entry_32.S:6) 进入中断向量表:kernel/arch/x86/kernel/syscall_table_32.S中的102号中断:7) 进入sys_socketcall()函数,根据子中断号以决定走哪个分支:kernel/net/Socket.c:二、socket其他库函数(bind, accept...)
1、对于其他库函数,都是引用上面提到的glibc-2.3.6/sysdept/unix/sysv/linux/i386/socket.S来实现的,如
a) bind.S:b) accept.S:在各个库函数调用中,设置不同的参数,如socket(用于设置子中断号), NARGS(系统调用的参数个数)等,最终由
C代码
movl $P(SOCKOP_,socket), %ebx /* Subcode is first arg to syscall. */
来生成最终的子中断号,然后放到ebx寄存器中;
2、所有socket系统调用的子中断号参见glibc-2.3.6/sysdept/unix/sysv/linux/Socketcall.h:系列文章,请参考我在iteye的blog:http://diecui1202.iteye.com
- Linux内核网络协议栈2-socket从库函数到内核
- Linux内核网络协议栈2-socket从库函数到内核
- Linux内核网络协议栈2-socket从库函数到内核 http://blog.chinaunix.net/uid-22359610-id-461086.html
- Linux内核网络协议栈4-创建socket(2)
- Linux内核网络协议栈1- socket文件系统注册
- Linux内核网络协议栈3-创建socket(1)
- Linux内核网络协议栈5-socket地址绑定
- Linux内核网络协议栈7-socket端口管理
- Linux内核网络协议栈4-socket地址绑定
- Linux内核-协议栈-从BSD Socket接口层到传输层1
- Linux内核网络协议栈6-socket地址绑定(2)
- Linux内核网络协议栈5-socket端口管理 2
- Linux内核网络协议栈8—socket监听
- Linux内核网络协议栈6-socket监听
- 【Linux 内核网络协议栈源码剖析】socket 函数剖析
- 【Linux 内核网络协议栈源码剖析】socket 函数剖析
- Linux 内核网络协议栈源码剖析socket 函数剖析
- Linux 内核网络协议栈 ------ 数据从接收到ip层
- 7-2
- UTMS 信令培训(14)
- Serializable接口
- Android基础之解析res目录
- GPT分区在PC机上安装linux不能引导的解决方法
- Linux内核网络协议栈2-socket从库函数到内核
- java 基础教程 from 百度 文库
- 文件(夹)深度隐藏/恢复工具
- 内存对齐方式
- 4月11日 GCD 总结(一)
- 嵌入式Linux中的boa服务器的移植
- PostgreSQL数据库备份及备份中遇到的问题
- 解决 class 'org.springframework.orm.hibernate3.LocalSessionFactoryBean' not found
- 从B树、B+树、B*树谈到R 树