确认strace输出内容:显示的是系统调用名还是包装函数名?
strace输出的是实际系统调用名称,而非包装函数名称
- strace捕获的是内核层面实际执行的系统调用名称,不是用户态库(比如glibc)中封装这些系统调用的包装函数名。
- 举个典型例子:C标准库的
fopen()是包装函数,它最终会调用内核的open系统调用,strace的输出里只会显示open,不会出现fopen。 - 还有些包装函数和系统调用同名(比如
read()),但strace显示的依然是内核的系统调用——因为strace是通过跟踪进程与内核的交互来工作的,直接拦截的是进入内核的请求,拿到的是内核能识别的真实系统调用名称,和用户态的包装函数无关。 - 本质上,strace绕过了用户态的库函数封装,直接展示进程向内核发起的系统调用指令。
内容的提问来源于stack exchange,提问作者Kode1000
相关产品推荐
相关产品推荐

