LINUX.ORG.RU

glibc-2.9 socket implementaion


0

0

Добрый день!

Как найти реализацию socket(...).

В glibc-2.9(socket/sys/socket.h) вижу следующее:

extern int socket (int __domain, int __type, int __protocol) __THROW;
Но тело функции socket(...) в исходниках glibc найти не получилось. Также встречались следующие объявления макросов:
0 gai.c           27 #define __socket socket
1 res_hconf.c      6 #define __socket socket
2 tst-rfc3484-2.c  7 #define __socket socket
3 tst-rfc3484-3.c  7 #define __socket socket
4 tst-rfc3484.c    7 #define __socket socket

После этого смутило такое место в ports/sysdeps/unix/sysv/aix/socket.c:

#include <sys/socket.h>
int
__socket (int domain, int type, int protocol)
{
  return socket (domain, type, protocol);
}

Может ли кто-нибудь внятно объяснить всю цепочку реализации socket(...)? Заранее благодарна.

Ответ на: комментарий от Deleted

Спасибо, разобралась. Остался только один вопрос. Для тестовой программы:

#include <sys/types.h>
#include <sys/socket.h>

int main()
{
        int fd;
        fd = socket(AF_INET, SOCK_STREAM, 0);
        return 0;
}

Компилируя со следующими опциями:

gcc main.c -static /usr/lib/libc.a

libc версии 2.9

Получаем следующий ассемблерный код для функции socket:


0804f670 <__socket>:
 804f670:       89 da                   mov    %ebx,%edx
 804f672:       b8 66 00 00 00          mov    $0x66,%eax
 804f677:       bb 01 00 00 00          mov    $0x1,%ebx
 804f67c:       8d 4c 24 04             lea    0x4(%esp),%ecx
 804f680:       cd 80                   int    $0x80
 804f682:       89 d3                   mov    %edx,%ebx
 804f684:       83 f8 83                cmp    $0xffffff83,%eax
 804f687:       0f 83 c3 11 00 00       jae    8050850 <__syscall_error>
 804f68d:       c3                      ret    

Интерисует место в libc(а оно должно быть как я понимаю именно в libc),где реализованн выше указанный кусок, насколько я поняла это делается через syscall. Ткните носом если кто-то копался в исходниках libc.

irishka
() автор топика
Ответ на: комментарий от irishka

все системные вызовы дергаются через int 0x80

ananas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.