2010-11-06 81 views
7

有沒有人試圖創建進程間通信的日誌文件?有人能給我一些關於實現這一目標的最佳方式的建議嗎?探聽進程間通信

+0

什麼樣的溝通? TCP套接字? Unix套接字? DBUS?共享內存? – thejh 2010-11-06 12:44:12

+0

哪種IPC? – st0le 2010-11-06 12:45:24

+0

謝謝你們。其實我不知道!我想換另一個接口卡。我希望將API調用記錄到原始驅動程序,並分析輸出以瞭解其輸入和輸出,然後將其轉換爲另一張卡的API。 – Patrick 2010-11-06 12:50:59

回答

2

的問題不是很清楚,和評論使之不太清楚,但無論如何...

的兩件事情先試是ipcs strace -e trace=ipc

+0

漂亮的工具。我不清楚你將如何使用ipcs。 – fabrizioM 2011-03-19 09:01:32

1

如果你想記錄所有IPC(看起來非常密集),你應該考慮使用儀器。

他們有很多很好的工具,請查閱PINthis section的手冊;

在這個例子中,我們展示瞭如何通過 做 更有選擇性的儀器檢查指令。此工具 會生成程序引用的所有內存地址的跟蹤。 這對調試也很有用, 用於模擬 處理器中的數據高速緩存。

如果您正在做一些重量級的調整和分析,請查看TAU(調整和分析工具)。

1

與內核驅動程序的通信可以有多種形式。通常有一個特殊的設備文件用於通信,或者可以有一個特殊的套接字類型,例如NETLINK。如果你幸運的話,有一個字符設備,read()和write()是交互的唯一方式 - 如果是這種情況,那麼這些調用很容易與各種方法截取。如果你不走運,許多事情都是用ioctl完成的,或者更加困難。

然而,使用內核驅動進行通信的程序上運行'strace'可以揭示它的一切 - 儘管'ltrace'可能更易讀,如果碰巧有程序用於通信的庫。通過調整參數「strace的」,你也許可以得到其中包含你需要的信息轉儲:

  • 首先,只是眼球的電話和揣摩內核通信手段
  • 然後,添加過濾器與strace打電話只記錄內核來電來函
  • 最後,確保strace的記錄所有通話的滿弦,這樣你就不必處理被截斷的數據

這點的答案IPC調試可能與通信不相關內核幾乎從不與IPC有任何關係(至少不是不同的UNIX IPC工具)。