strace 分析 Linux 版的 getaddrinfo

本文通过strace工具分析了Linux环境下getaddrinfo系统调用的过程,包括查找C库如libc.so.6、nss_files.so.2等,读取网络配置文件resolv.conf和hosts,以及处理找不到库文件时的错误情况。通过这个过程,读者可以了解getaddrinfo在Linux系统下的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为啥说是 Linux 版的 getaddrinfo,因为这世界上还有一个安卓的。而且这一不注意就搅混了。毕竟Linux版本使用的是 glibc 库,而安卓版本用的是 bionic 库。两个不同的 C 库,两个不同的实现,原理相似,基因相似,实质不同。

 

/ # strace /data/getaddinfo localhost
execve("/data/getaddinfo", ["/data/getaddinfo", "localhost"], [/* 24 vars */]) = 0
brk(0)                                  = 0xb74000
uname({sys="Linux", node="localhost", ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f02000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/vendor/lib/tls/v7l/neon/vfp/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/vendor/lib/tls/v7l/neon/vfp", 0xbea1b2e0) = -1 ENOENT (No such file or directory)
open("/vendor/lib/tls/v7l/neon/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/vendor/lib/tls/v7l/neon", 0xbea1b2e0) = -1 ENOENT (No such file or directory)
open("/vendor/lib/tls/v7l/vfp/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/vendor/lib/tls/v7l/vfp", 0xbea1b2e0) = -1 ENOENT (No such file or directory)
open("/vendor/lib/tls/v7l/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/vendor/lib/tls/v7l", 0xbea1b2e0) = -1 ENOENT (No such file or directory)
open("/vendor/lib/tls/neon/vfp/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/vendor/lib/tls/neon/vfp", 0xbea1b2e0) = -1 ENOENT (No such file or directory)
open("/vendor/lib/tls/neon/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/vendor/lib/tls/neon", 0xbea1b2e0) = -1 ENOENT (No such file or directory)
open("/vendor/lib/tls/vfp/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/vendor/lib/tls/vfp", 0xbea1b2e0) = -1 ENOENT (No such file or directory)
open("/vendor/lib/tls/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/vendor/lib/tls", 0xbea1b2e0)   = -1 ENOENT (No such file or directory)
open("/vendor/lib/v7l/neon/vfp/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/vendor/lib/v7l/neon/vfp", 0xbea1b2e0) = -1 ENOENT (No such file or directory)
open("/vendor/lib/v7l/neon/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/vendor/lib/v7l/neon", 0xbea1b2e0) = -1 ENOENT (No such file or directory)
open("/vendor/lib/v7l/vfp/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/vendor/lib/v7l/vfp", 0xbea1b2e0) = -1 ENOENT (No such file or directory)
open("/vendor/lib/v7l/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/vendor/lib/v7l", 0xbea1b2e0)   = -1 ENOENT (No such file or directory)
open("/vendor/lib/neon/vfp/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/vendor/lib/neon/vfp", 0xbea1b2e0) = -1 ENOENT (No such file or directory)
open("/vendor/lib/neon/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/vendor/lib/neon", 0xbea1b2e0)  = -1 ENOENT (No such file or directory)
open("/vendor/lib/vfp/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/vendor/lib/vfp", 0xbea1b2e0)   = -1 ENOENT (No such file or directory)
open("/vendor/lib/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/vendor/lib", {st_mode=S_IFDIR|0755, st_size=2456, ...}) = 0
open("/system/lib/tls/v7l/neon/vfp/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/system/lib/tls/v7l/neon/vfp", 0xbea1b2e0) = -1 ENOENT (No such file or directory)
open("/system/lib/tls/v7l/neon/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/system/lib/tls/v7l/neon", 0xbea1b2e0) = -1 ENOENT (No such file or directory)
open("/system/lib/tls/v7l/vfp/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/system/lib/tls/v7l/vfp", 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值