有谁知道哪个系统调用属于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) =


但是输出太多...我无法解释...

所以,我想知道


哪个系统调用名称属于组件(属于wifi或属于SD卡)
如何使用组件获取组件的系统调用(应该使用什么命令?)
应该如何使用“ strace”来跟踪SD卡?我应该拥有B应用程序(B应用程序仅具有打开的SD卡还是关闭的SD卡?)我不知道该做些什么实验。

最佳答案

所有这些调用都属于文件系统组件。然后通过内核将其路由到实际的硬件驱动器。因此,仅通过查看系统调用就无法知道。

您需要做的是查找打开的调用以查看正在打开的文件。该调用将返回一个称为文件句柄的数字。此数字以后用作读取/写入/关闭调用的第一个参数。

对于WIFI而言,事情变得更加棘手,因为您将不得不监视整个套接字调用以及sendto之类的事情。另外,您需要交叉引用路由图。

基本上,您要执行的操作实际上很难在syscall级别执行。过去,我过去通过深入研究内核和驱动程序来完成此类工作。你在这
更接近实际硬件以查看上下文。

关于android - 我如何使用“strace”知道组件的系统调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21104430/

10-10 06:00