码迷,mamicode.com
首页 > 其他好文 > 详细

Socket与系统调用深度分析

时间:2019-12-19 17:41:56      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:使用   应用   isp   list   core   通过   32位   strong   style   

本实验以上一次实验为基础,在构建好的menuOS之上,对replyhi进行分析。

当在应用中调用到socket()函数时,便会发生系统调用,所有与socket相关的操作都会被映射到 sys_socketcall 这个系统调用中(32位)。

给 sys_socketcall 打上断点,当发生调用时便会弹出信息。在qemu中menuOS中执行replyhi,然后输入 hello,运行结果如下。当执行hello时,执行了socket相关的操作,故发生sys_socketall系统调用,gdb在此处暂停。

技术图片

 

 

 查看net/socket.c中SYSCALL_DEFINE2的源码:

技术图片

 

 

 根据call的不同来 具体选择要使用的内核处理函数。

gdb调试时,一次完整的hello指令共捕获到了7次sys_socketcall系统调用:

技术图片

 

 

 通过对每一次sys_socketcall使用print call输出call的值,

技术图片

 

 

 通过查看socket.c 中SYSCALL_DEFINE2源代码中的switch部分,我们发现,具体执行的系统调用按顺序如下:

1.

技术图片

 2.

技术图片

3.技术图片

4.技术图片

 

 5.技术图片

 

 6.技术图片

 

 7.技术图片

 

在net/socket.c中我们可以查看__sys_listen()的源代码如下(其余也均在此文件中):

int __sys_listen(int fd, int backlog)
{
        struct socket *sock;
        int err, fput_needed;
        int somaxconn;

        sock = sockfd_lookup_light(fd, &err, &fput_needed);
        if (sock) {
                somaxconn = sock_net(sock->sk)->core.sysctl_somaxconn;
                if ((unsigned int)backlog > somaxconn)
                        backlog = somaxconn;

                err = security_socket_listen(sock, backlog);
                if (!err)
                        err = sock->ops->listen(sock, backlog);

                fput_light(sock->file, fput_needed);
        }
        return err;
}

 

 

 

 

 

 

 

 

 

 

Socket与系统调用深度分析

标签:使用   应用   isp   list   core   通过   32位   strong   style   

原文地址:https://www.cnblogs.com/mingjian6666/p/12068883.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!