2014-01-14 55 views
1

有誰知道哪個系統調用屬於I/O組件(WiFi,SDcard或GSP等)?如何使用「strace」知道組件的系統調用

我使用strace跟蹤應用程序,而現在,我有一個應用程序(A應用程序只是有開/關功能的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. 我如何使用組件來獲得組件的系統調用(什麼命令,我應該UE的?)
  3. 應該如何使用「strace的」到跟蹤SDcard?我是否應該有B應用程序(B應用程序只是打開SD卡或關閉SD卡?)我不知道我可以做什麼實驗。

回答

1

所有這些調用屬於文件系統組件。然後通過內核路由到實際的硬件驅動器。所以沒有辦法通過查看系統調用來知道。

您需要做的是查找打開的調用以查看正在打開的文件。該調用將返回一個數字,稱爲文件句柄。此號碼稍後將用作讀取/寫入/關閉呼叫的第一個參數。

對於WIFI來說,事情甚至會更加詭計,因爲您將不得不監視一大堆套接字調用以及像sendto這樣的事情。另外,您需要交叉引用路由映射。

基本上,你試圖做的事情在系統調用級別上很難做到。我過去通過深入到內核和驅動程序來做這樣的事情。在那裏你可以看到上下文更接近實際的硬件。

+0

你好,感謝回覆! 您的迴應: 【所以無法通過查看系統調用知道】 我不知道這是什麼意思? ,因爲我想知道跟蹤組件的系統調用。 Strace可以跟蹤應用程序的pid, 所以,我有一個應用程序(只有wifi開/關功能,A應用程序是這樣的:http://ppt.cc/DYbJ) 如果可能知道哪個系統調用屬於wifi開/關 另一個問題, strace的輸出有這個 【syscall_983042(0x4e1d5428,0x4e1d542c,...】 什麼意思???很多「syscall_983042」 – user3192332

+1

如果我追蹤「憤怒的小鳥」,如果可能知道wifi打開/關閉打開,並打開SDcard(這意味着運行憤怒的小鳥必須使用wifi,SD卡或其他組件,所以我想每個組件的打開或關閉) – user3192332

+0

Linux比你想要做的更復雜一點。應用程序所做的系統調用不會尋址到系統中非常接近硬件的組件。應用程序可以與文件系統或套接字層進行通信。內核可以調用WiFi或SD等硬件子系統。如果你想從strace中找出你需要考慮在他們的上下文中的調用。 – Vlad

0

請注意,爲了更清楚地瞭解文件描述符(如果繼續使用strace),可以使用最近版本的-y選項(至少4.8版本)。 -y會將文件描述符解碼爲路徑。

相關問題