strace一下ls看看结果

strace一下ls看看结果
execve("/nix/store/c2bq8xsayc90s33fd5xbm1vh5lrmwcfq-coreutils-9.3/bin/ls", ["ls", "/etc/hosts"], 0x7fff2b7e6308 /* 147 vars */) = 0

所以说ls是coreutils提供的

在Unix和Linux系统上,当一个程序被执行时,通常会将程序名称作为第一个参数(即argv[0])传递给它。这种传递是为了使程序能够知道自己是如何被调用的,这在某些情况下是有用的。例如:

  • 多用途程序: 有些程序会根据其被调用的名称改变其行为。例如,许多系统上的busybox就是这样,它会提供ls, cp, mv等多个命令,但所有这些命令都是链接到同一个busybox可执行文件。当你执行ls时,busybox会查看argv[0],发现它是ls,然后执行ls命令的功能。
  • 诊断和日志记录: 程序可能希望在日志或错误消息中包括其调用名称。知道自己是如何被调用的可以帮助程序提供更有用的反馈。
  • 自引用: 有时程序可能需要重新启动自己或启动其它实例。知道自己的调用名称使这更容易实现。

147 vars 应该是在调用 execve 时传递给 ls 程序的所有环境变量。当一个程序在Unix或Linux系统上运行时,它继承了其父进程的环境变量

brk(NULL)                               = 0x83c000

brk管理进程地址空间中的堆。每个进程都有一个虚拟地址空间,这个地址空间被分为几个不同的段:

  • 代码段(Text Segment):存储了程序的执行代码。
  • 数据段(Data Segment):存储了全局变量和静态变量。数据段可以进一步划分为已初始化和未初始化的数据段(通常称为BSS)。
  • 堆(Heap):紧接着数据段,用于动态内存分配。堆的大小是可以在运行时改变的,它可以增长以适应动态内存分配的需求。
  • 栈(Stack):位于虚拟地址空间的顶部,并向下增长(在大多数体系结构上)。它存储了局部变量、函数参数、返回地址和执行的函数调用。

当程序需要更多的动态内存时,使用brk或其他相关的系统调用(如sbrk)来增加堆的大小。

当参数为NULL时,它返回当前的"break"点,也就是数据段的末端

arch_prctl(0x3001 /* ARCH_??? */, 0x7ffc5b823b20) = -1 EINVAL (Invalid argument)

一个专门用于x86_64架构的系统调用,用于获取或设置某些特定于架构的处理器设置,查询或设置某些体系结构特定的线程状态。这里的调用尝试设置一个未知的操作码(0x3001 /* ARCH_??? */),所以返回了EINVAL错误,表示参数无效

mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4bd9187000
access("/etc/ld-nix.so.preload", R_OK)  = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/nix/store/k64mgy0pwn8vh0zdfafplbxpllavd1jm-acl-2.3.1/lib/glibc-hwcaps/x86-64-v3/libacl.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/nix/store/k64mgy0pwn8vh0zdfafplbxpllavd1jm-acl-2.3.1/lib/glibc-hwcaps/x86-64-v3", 0x7ffc5b822d50, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/nix/store/k64mgy0pwn8vh0zdfafplbxpllavd1jm-acl-2.3.1/lib/glibc-hwcaps/x86-64-v2/libacl.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/nix/store/k64mgy0pwn8vh0zdfafplbxpllavd1jm-acl-2.3.1/lib/glibc-hwcaps/x86-64-v2", 0x7ffc5b822d50, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/nix/store/k64mgy0pwn8vh0zdfafplbxpllavd1jm-acl-2.3.1/lib/libacl.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
newfstatat(3, "", {st_mode=S_IFREG|0555, st_size=44800, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 41008, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f4bd917c000
mmap(0x7f4bd917e000, 20480, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7f4bd917e000
mmap(0x7f4bd9183000, 8192, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x7000) = 0x7f4bd9183000
mmap(0x7f4bd9185000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x8000) = 0x7f4bd9185000
close(3)                                = 0
openat(AT_FDCWD, "/nix/store/k64mgy0pwn8vh0zdfafplbxpllavd1jm-acl-2.3.1/lib/libattr.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/nix/store/jq5phghfa28brwd4bmxvfcqq30319pzl-attr-2.5.1/lib/glibc-hwcaps/x86-64-v3/libattr.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/nix/store/jq5phghfa28brwd4bmxvfcqq30319pzl-attr-2.5.1/lib/glibc-hwcaps/x86-64-v3", 0x7ffc5b822d30, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/nix/store/jq5phghfa28brwd4bmxvfcqq30319pzl-attr-2.5.1/lib/glibc-hwcaps/x86-64-v2/libattr.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/nix/store/jq5phghfa28brwd4bmxvfcqq30319pzl-attr-2.5.1/lib/glibc-hwcaps/x86-64-v2", 0x7ffc5b822d30, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/nix/store/jq5phghfa28brwd4bmxvfcqq30319pzl-attr-2.5.1/lib/libattr.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
newfstatat(3, "", {st_mode=S_IFREG|0555, st_size=31272, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 28696, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f4bd9174000
mmap(0x7f4bd9176000, 12288, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7f4bd9176000
mmap(0x7f4bd9179000, 4096, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x5000) = 0x7f4bd9179000
mmap(0x7f4bd917a000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x5000) = 0x7f4bd917a000
close(3)                                = 0
openat(AT_FDCWD, "/nix/store/k64mgy0pwn8vh0zdfafplbxpllavd1jm-acl-2.3.1/lib/libgmp.so.10", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/nix/store/jq5phghfa28brwd4bmxvfcqq30319pzl-attr-2.5.1/lib/libgmp.so.10", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/nix/store/ra5glr45vxydmyj6ja3jf1lgdy85yx2p-gmp-with-cxx-6.2.1/lib/glibc-hwcaps/x86-64-v3/libgmp.so.10", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/nix/store/ra5glr45vxydmyj6ja3jf1lgdy85yx2p-gmp-with-cxx-6.2.1/lib/glibc-hwcaps/x86-64-v3", 0x7ffc5b822d10, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/nix/store/ra5glr45vxydmyj6ja3jf1lgdy85yx2p-gmp-with-cxx-6.2.1/lib/glibc-hwcaps/x86-64-v2/libgmp.so.10", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/nix/store/ra5glr45vxydmyj6ja3jf1lgdy85yx2p-gmp-with-cxx-6.2.1/lib/glibc-hwcaps/x86-64-v2", 0x7ffc5b822d10, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/nix/store/ra5glr45vxydmyj6ja3jf1lgdy85yx2p-gmp-with-cxx-6.2.1/lib/libgmp.so.10", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
newfstatat(3, "", {st_mode=S_IFREG|0555, st_size=700968, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 651784, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f4bd90d4000
mmap(0x7f4bd90e6000, 475136, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x12000) = 0x7f4bd90e6000
mmap(0x7f4bd915a000, 94208, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x86000) = 0x7f4bd915a000
mmap(0x7f4bd9171000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x9d000) = 0x7f4bd9171000
close(3)                                = 0
openat(AT_FDCWD, "/nix/store/k64mgy0pwn8vh0zdfafplbxpllavd1jm-acl-2.3.1/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/nix/store/jq5phghfa28brwd4bmxvfcqq30319pzl-attr-2.5.1/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/nix/store/ra5glr45vxydmyj6ja3jf1lgdy85yx2p-gmp-with-cxx-6.2.1/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/nix/store/3n58xw4373jp0ljirf06d8077j15pc4j-glibc-2.37-8/lib/glibc-hwcaps/x86-64-v3/l
ibc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/nix/store/3n58xw4373jp0ljirf06d8077j15pc4j-glibc-2.37-8/lib/glibc-hwcaps/x86-64-v3", 0x7ffc5b822cf0, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/nix/store/3n58xw4373jp0ljirf06d8077j15pc4j-glibc-2.37-8/lib/glibc-hwcaps/x86-64-v2/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/nix/store/3n58xw4373jp0ljirf06d8077j15pc4j-glibc-2.37-8/lib/glibc-hwcaps/x86-64-v2", 0x7ffc5b822cf0, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/nix/store/3n58xw4373jp0ljirf06d8077j15pc4j-glibc-2.37-8/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220<\2\0\0\0\0\0"..., 832) = 832
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
newfstatat(3, "", {st_mode=S_IFREG|0555, st_size=2252696, ...}, AT_EMPTY_PATH) = 0
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
mmap(NULL, 1990000, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f4bd8eee000
mmap(0x7f4bd8f10000, 1413120, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22000) = 0x7f4bd8f10000
mmap(0x7f4bd9069000, 360448, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x17b000) = 0x7f4bd9069000
mmap(0x7f4bd90c1000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1d3000) = 0x7f4bd90c1000
mmap(0x7f4bd90c7000, 52592, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f4bd90c7000
close(3)                                = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4bd8eec000
arch_prctl(ARCH_SET_FS, 0x7f4bd8eed040) = 0
set_tid_address(0x7f4bd8eed310)         = 125827
set_robust_list(0x7f4bd8eed320, 24)     = 0
rseq(0x7f4bd8eed960, 0x20, 0, 0x53053053) = 0
mprotect(0x7f4bd90c1000, 16384, PROT_READ) = 0
mprotect(0x7f4bd9171000, 8192, PROT_READ) = 0
mprotect(0x7f4bd917a000, 4096, PROT_READ) = 0
mprotect(0x7f4bd9185000, 4096, PROT_READ) = 0
mprotect(0x539000, 45056, PROT_READ)    = 0
mprotect(0x7f4bd91ba000, 8192, PROT_READ) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
prctl(PR_SET_NAME, "ls")                = 0
prctl(PR_SET_MM, PR_SET_MM_ARG_START, 0x7ffc5b825a47, 0, 0) = -1 EPERM (Operation not permitted)
getrandom("\xaf\x9d\xfa\x64\xa9\x05\x0d\x82", 8, GRND_NONBLOCK) = 8
brk(NULL)                               = 0x83c000
brk(0x85d000)                           = 0x85d000
openat(AT_FDCWD, "/nix/store/b3jny48vbii9jkfk95hx0pzpks5ym3dw-glibc-locales-2.37-8/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0444, st_size=224335696, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 224335696, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f4bcb800000
close(3)                                = 0
ioctl(1, TCGETS, {c_iflag=ICRNL|IXON|IUTF8, c_oflag=NL0|CR0|TAB0|BS0|VT0|FF0|OPOST|ONLCR, c_cflag=B38400|CS8|CREAD, c_lflag=ISIG|ICANON|ECHO|ECHOE|ECHOK|IEXTEN|ECHOCTL|ECHOKE, ...}) = 0
ioctl(1, TIOCGWINSZ, {ws_row=62, ws_col=103, ws_xpixel=1854, ws_ypixel=2232}) = 0
statx(AT_FDCWD, "/etc/hosts", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_MODE, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0444, stx_size=58, ...}) = 0
statx(AT_FDCWD, "/etc/hosts", AT_STATX_SYNC_AS_STAT|AT_SYMLINK_NOFOLLOW|AT_NO_AUTOMOUNT, STATX_MODE, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFLNK|0777, stx_size=17, ...}) = 0
newfstatat(1, "", {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0), ...}, AT_EMPTY_PATH) = 0
write(1, "/etc/hosts\n", 11/etc/hosts
)            = 11
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++