如何使用“strace”了解组件的系统调用

时间:2014-01-14 01:12:57

标签: android system-calls strace

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

但输出有这么多......我无法解释......

所以,我想知道

  1. 什么系统调用名称属于组件(属于wifi或属于SD卡)
  2. 如何使用组件来获取组件的系统调用(我应该使用什么命令?)
  3. 如何使用“strace”跟踪SDcard?我应该有B应用程序(B应用程序只是打开SD卡或关闭SD卡吗?)我不知道我可以做什么实验。

2 个答案:

答案 0 :(得分:1)

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

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

对WIFI来说,事情甚至都很棘手,因为你必须监控一大堆套接字调用以及sendto之类的东西。另外,您需要交叉引用路由映射。

基本上,你想要做的事情在系统调用级别上真的很难。我以前做过这样的事情是通过深入到内核和驱动程序。你在这 更接近实际硬件以查看上下文。

答案 1 :(得分:0)

请注意,为了更多地了解文件描述符(如果继续使用strace),可以使用最近的strace版本的-y选项(至少有4.8个版本)。 -y会将文件描述符解码为路径。