2010-11-06 15 views
7

¿Alguien ha intentado crear un archivo de registro de comunicaciones entre procesos? ¿Podría alguien darme un pequeño consejo sobre la mejor manera de lograr esto?Snoop interprocess communications

+0

¿Qué tipo de comunicación? Sockets TCP? Zócalos Unix? DBUS? ¿Memoria compartida? – thejh

+0

¿Qué tipo de IPC? – st0le

+0

Gracias chicos. ¡En realidad, no lo sé! Quiero cambiar una tarjeta de interfaz por otra. Esperaba registrar las llamadas de la API al controlador original y analizar el resultado para comprender los pormenores del mismo y luego traducirlo a la API de otra tarjeta – Patrick

Respuesta

2

La pregunta no es del todo clara, y los comentarios hacen que sea menos clara, pero en fin ...

Las dos cosas para probar primero son ipcs y strace -e trace=ipc.

+0

buenas herramientas. Aunque no tengo claro cómo usaría ipcs. – fabrizioM

1

Si desea registrar todo el IPC (parece muy intenso), debe considerar la instrumentación.

Son muchas y buenas herramientas para esto, consulte PIN en perticular, this section del manual;

En este ejemplo, se muestra cómo hacer instrumentación más selectivo por examinar las instrucciones. Esta herramienta genera un rastro de todas las direcciones de memoria a las que hace referencia un programa. Esto también es útil para la depuración y para simular una memoria caché de datos en un procesador .

Si realiza un ajuste y un análisis de gran peso, consulte TAU (Utilidad de ajuste y análisis).

1

La comunicación a un controlador de núcleo puede tomar muchas formas. Generalmente hay un archivo de dispositivo especial para la comunicación, o puede haber un tipo de socket especial, como NETLINK. Si tiene suerte, hay un dispositivo de caracteres para el cual read() y write() son el único medio de interacción: si ese es el caso, entonces esas llamadas son fáciles de interceptar con una variedad de métodos. Si no tiene suerte, se hacen muchas cosas con ioctls o algo aún más difícil.

Sin embargo, ejecutar 'strace' en el programa utilizando el controlador del kernel para comunicarse puede revelar casi todo lo que hace, aunque 'ltrace' podría ser más legible si existen bibliotecas que el programa utiliza para la comunicación. Sintonizando los argumentos a 'strace', es probable que pueda obtener un volcado que contiene sólo la información que necesita:

  • En primer lugar, simplemente calcular visualmente las llamadas y tratar de averiguar los medios de comunicación del núcleo
  • Entonces, añadir filtros para strace llamar para registrar sólo el núcleo de comunicación llama
  • Por último, asegúrese de strace registra las cadenas completas de todas las llamadas, por lo que no tiene que tratar con datos truncados

las respuestas que apuntan a La depuración del IPC probablemente no sea relevante, ya que la comunicación con el kernel casi nunca tiene nada que ver con IPC (al menos no las diferentes instalaciones de UNIX IPC).

Cuestiones relacionadas