2010-11-06 4 views
7

Hat jemand versucht, eine Protokolldatei der Interprozesskommunikation zu erstellen? Könnte mir jemand einen kleinen Ratschlag geben, wie dies am besten zu erreichen ist?Snoop Interprozesskommunikation

+0

Welche Art von Kommunikation? TCP-Sockets? Unix-Sockets? DBUS? Geteilte Erinnerung? – thejh

+0

Welche Art von IPC? – st0le

+0

Danke Jungs. Eigentlich weiß ich nicht! Ich möchte eine Schnittstellenkarte für eine andere Karte ändern. Ich hatte gehofft, die API-Aufrufe an den ursprünglichen Treiber zu protokollieren und die Ausgabe zu analysieren, um die In- und Outs zu verstehen und dann diese in die API einer anderen Karte zu übersetzen – Patrick

Antwort

2

Die Frage ist nicht ganz klar, und Kommentare machen es weniger klar, aber trotzdem ...

Die beiden Dinge erste ipcs und strace -e trace=ipc sind zu versuchen.

+0

nette Werkzeuge. Mir ist allerdings nicht klar, wie du ipcs benutzen würdest. – fabrizioM

1

Wenn Sie alle IPC (scheint sehr intensiv) protokollieren möchten, sollten Sie Instrumentierung in Betracht ziehen.

Sie sind eine Menge guter Werkzeuge dafür, überprüfen Sie PIN in speziellem, this section des Handbuchs;

In diesem Beispiel zeigen wir, wie selektive Instrumentierung durch Prüfung der Anweisungen zu tun. Dieses Tool generiert eine Ablaufverfolgung aller Speicher Adressen, auf die von einem Programm verwiesen wird. Dies ist auch nützlich für das Debugging und für die Simulation eines Datencache in einem Prozessor.

Wenn Sie etwas schwergewichtig abstimmen und analysieren, überprüfen Sie TAU (Tuning und Analyse Utility).

1

Die Kommunikation mit einem Kernel-Treiber kann viele Formen annehmen. Normalerweise gibt es eine spezielle Gerätedatei für die Kommunikation, oder es kann einen speziellen Socket-Typ wie NETLINK geben. Wenn Sie Glück haben, gibt es ein Zeichengerät, auf das read() und write() die einzigen Mittel der Interaktion sind - wenn das der Fall ist, dann sind diese Aufrufe mit einer Vielzahl von Methoden leicht abzufangen. Wenn Sie Pech haben, werden viele Dinge mit ioctls oder etwas noch schwieriger gemacht.

Allerdings kann 'strace' auf dem Programm mit dem Kernel-Treiber zu kommunizieren kann fast alles aufdecken, obwohl 'ltrace' besser lesbar sein kann, wenn es Bibliotheken gibt, die das Programm für die Kommunikation verwendet. Durch die Abstimmung der Argumente ‚strace‘, können Sie wahrscheinlich einen Dump erhalten, die nur die Informationen enthält, die Sie brauchen:

  • Zuerst nur die Anrufe Augapfel und versuchen, die mittels Kernel Kommunikation
  • Dann, um herauszufinden, Filter hinzufügen strace nennen nur die Kernel-Kommunikation ruft
  • Schließlich stellen Sie sicher, strace protokolliert die vollen Strings aller Anrufe zu protokollieren, so dass Sie nicht zu mit abgeschnittenen Daten

die Antworten, dem Punkt zu tun haben IPC-Debugging ist wahrscheinlich nicht relevant, da mit ihm kommuniziert wird der Kernel hat fast nie etwas mit IPC zu tun (zumindest nicht mit den verschiedenen UNIX-IPC-Einrichtungen).