gpt4 book ai didi

strace - strace 到底输出什么?

转载 作者:行者123 更新时间:2023-12-02 06:40:25 24 4
gpt4 key购买 nike

精确是我在这里关注的重点......

mmap(0x37aa74d000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x14d000) = 0x37aa74d000

所有人都说strace返回所有使用的系统调用,但我grep entry.S并且只有sys_mmap而不仅仅是mmap,这意味着mmap 不是系统调用,应该是 sys_mmap

那么 strace 输出到底是什么?

另一个问题是我认为= 0x37aa74d000表示返回值,对吗?但是如果函数没有返回类型怎么办?(void)?

最佳答案

strace用户空间的角度生成系统调用的名称:so mmap , open , read , write等等。这与 libc 包装器执行比仅捕获操作系统更复杂的操作时编码的函数调用不同。例如,如果您调用sigaction在您的代码中,strace将向您显示调用rt_sigaction的电话,因为多年来,rt_sigaction是用于设置信号操作的最通用的系统调用,因此 GNU libc 根据该原语实现了所有信号设置函数。 (在这种情况下,您无法直接调用 rt_sigaction,因为 glibc 没有公开它的包装器 - 我不知道为什么会这样。)

sys_mmap是 Linux 内核中函数的名称,恰好mmap 的入口点系统调用。 Linus 可以为系统调用入口点选择任何他想要的命名约定 -- mmap , mach_mmap , ZwMmap无论如何——这是一个实现细节,与用户空间无关。所以strace不会向您显示这些名称。

唯一返回类型为 void 的系统调用是终止进程的,例如 exit_group 。 (从编程语言设计的角度来看,更准确的说法是它们没有返回类型,因为它们不返回。) strace像这样打印:

exit_group(0)                           = ?

所有其他系统调用都返回某些内容,因为至少在理论上,它们都可能失败,并且它们必须告诉您它们是否失败。如果除了成功/失败指示之外没有其他值可供返回,那么它们将返回 int成功为零或 -1失败,以及 strace逐字打印该内容。 [Soapbox:这是 Unix 中长期存在的设计错误,至少可以追溯到 NFS 的第一个实现。资源释放原语应该是不可能的 - close , munmap等——失败,它们的返回类型应该是 void来表明这一点。我完全打算一拿到时间机器就解决这个问题。]

关于strace - strace 到底输出什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5509662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com