有谁知道哪个系统调用属于I / O组件(WiFi,SD卡或GSP等)?
我使用strace
跟踪应用程序,现在,我有一个应用程序(一个应用程序只有wifi开/关功能,A的PID = 999),我使用cmd来键命令
./strace -p 999 -t -v
如果我使用此命令./strace -p 999 -t -v -e trace=open,close,read,write
输出,例如:
04:18:11.473383 read(52, "D", 1) = 1
04:18:11.476191 write(39, "W", 1) = 1
04:18:11.477198 write(53, "u", 1) = 1
04:18:11.478114 read(38, "W", 16) = 1
04:18:11.583430 read(52, "D", 1) = 1
04:18:11.584315 write(39, "W", 1) = 1
04:18:11.586787 write(53, "u", 1) = 1
04:18:11.587824 read(38, "W", 16) = 1
04:18:11.794337 read(38, "W", 16) = 1
04:18:11.800227 read(38, "W", 16) = 1
04:18:11.802210 syscall_983042(0x4e1d5428, 0x4e1d542c, 0, 0xfff, 0x408e54d8, 0x4e1d5428, 0x4e1d8469, 0xf0002, 0, 0x4e1d542c, 0xf81ef003, 0x14, 0, 0xbee5c738, 0x408b6093, 0x4006c8fc, 0x40000010, 0x4e1d5428, 0, 0, 0xc764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) =
但输出有这么多......我无法解释......
所以,我想知道
答案 0 :(得分:1)
所有这些调用都属于文件系统组件。然后将其通过内核路由到实际的硬件驱动器。因此,仅通过查看系统调用就无法知道。
您需要做的是查找打开的调用以查看正在打开的文件。该调用将返回一个称为文件句柄的数字。此数字稍后用作读/写/关闭调用的第一个参数。
对WIFI来说,事情甚至都很棘手,因为你必须监控一大堆套接字调用以及sendto之类的东西。另外,您需要交叉引用路由映射。
基本上,你想要做的事情在系统调用级别上真的很难。我以前做过这样的事情是通过深入到内核和驱动程序。你在这 更接近实际硬件以查看上下文。
答案 1 :(得分:0)
请注意,为了更多地了解文件描述符(如果继续使用strace),可以使用最近的strace版本的-y选项(至少有4.8个版本)。 -y会将文件描述符解码为路径。