在哪个库中写入 writev 和其他在 socket 上操作的函数,如 send 以及 .so 文件的位置

In which library write writev and other functions that operate on socket like send also and where is the location of .so file

我喜欢运行这个命令在我的一些系统库或内核上寻找类似于sendfile、send、write writev 的函数名。命令

nm -D /usr/lib/libopenal.so.1 //or T option

但我不知道在哪里可以找到这些函数的确切名称,我的想法是 运行 上面的命令带有 grep 管道,所以我可以获得函数的确切名称,例如 sendfile,

有人告诉我然后写可能有名字 64__sys_write 这是正确的国王,也许它的一些其他功能所以我想知道我可以在 ubuntu linux 上获得这个信息

But I don't know where to look for these functions

你不需要知道去哪里找,但你应该学会如何自己找到琐碎问题(比如这个)的答案。

以下是您可以使用的步骤:

  1. Select 一个执行您感兴趣的功能的程序。在 send 的情况下,nctelnet 似乎是不错的潜在候选人.
  2. 确认所选程序确实调用了 send:
nm -AD $(which nc telnet) | grep ' send'
/usr/bin/nc:                 U sendmsg@GLIBC_2.2.5
/usr/bin/telnet:                 U send@GLIBC_2.2.5

好吧,假设我们只对 send 感兴趣,那么 telnet 是我们的“目标”而 nc 不是。

  1. 找出 telnet 使用的库:
ldd /usr/bin/telnet
        linux-vdso.so.1 (0x00007ffe957d4000)
        libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f2f2e2f4000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2f2e12f000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f2f2dfea000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f2f2e53c000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f2f2dfd0000)

函数 send 必须在其中之一中定义。哪一个?

  1. 运行 nm -D | grep ' send' 上每一个,发现函数定义在libc.so.6:
nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep ' send'
00000000000fee60 W send@@GLIBC_2.2.5
00000000000f3430 T sendfile@@GLIBC_2.2.5
00000000000f3430 W sendfile64@@GLIBC_2.3
00000000000ff520 W sendmmsg@@GLIBC_2.14
00000000000fef20 W sendmsg@@GLIBC_2.2.5
00000000000fefc0 W sendto@@GLIBC_2.2.5

奖励:您发现 sendfile 也是 libc.so.6.

中定义的