¿Equivalente a "truss -T" y "truss -U" en Linux?


12

¿Existe un equivalente de lo que hace la opción -Ty -Ude la trussutilidad Solaris en Linux?

Esos son para especificar una llamada al sistema ( -T) o una función de biblioteca ( -U) que, cuando es invocada por la aplicación rastreada, hará que se detenga.

O, dicho de otro modo, me gustaría que cualquier proceso iniciado por una aplicación rastreada se detenga (como si SIGSTOP lo elimine) tan pronto como realice una llamada al sistema o una llamada a la función de biblioteca compartida.

stracey ltraceen Linux proporcionan gran parte del conjunto de características de Solaris truss, pero no parecen estar haciendo eso.

Por ejemplo:

truss -f -T open cmd

Sería como, strace -f cmdexcepto que si el proceso en ejecución cmdo alguno de sus descendientes realiza alguna openllamada al sistema, se detendrá de inmediato (y puedo reanudarlo más adelante según mi conveniencia)

En algunos casos, podía usar los gdb's' catch syscall, pero estaba buscando una solución que pudiera seguir convenientemente las bifurcaciones y continuar haciéndolo para todos los procesos bifurcados y seguir haciéndolo incluso después de execves.

Parece recordar alguna utilidad que ofrece la misma funcionalidad, incluso una (u opciones para esa misma utilidad) para aplicaciones de un solo paso entre algunas ocurrencias de alguna llamada de sistema remotamente así, pero mi memoria me está fallando, ni siquiera puedo estar seguro eso fue en Linux.


1
Realmente no es una respuesta a su pregunta, pero gdb tiene algunas opciones para seguir las bifurcaciones, simplemente no elimina un execve. Sin embargo, todavía solo realiza un proceso a la vez, lo que probablemente sea un factor decisivo si está buscando una funcionalidad similar a la de un strace, pero pensé que lo mencionaría por si acaso.
Bratchley

@ JoelDavis, gracias. Y parece que también puede seguir después de exec, ( follow-exec-mode), estoy experimentando con eso. No responde estrictamente la pregunta, pero puede ser lo suficientemente bueno para lo que necesito.
Stéphane Chazelas

Si entiendo su pregunta, está buscando una forma de rastrear hasta que se vea una señal específica y luego deje de rastrear, no detenga o elimine la aplicación que está rastreando, ¿verdad?
slm

@slm, no, quiero que un proceso iniciado por una aplicación rastreada se detenga (como si SIGSTOP lo hubiera eliminado) tan pronto como realice una llamada al sistema. He agregado un enlace a la página de trussmanual de Solaris .
Stéphane Chazelas

Déjame asegurarme de que entiendo correctamente. Desea una forma de detener un proceso cuando realiza una llamada al sistema específica. ¿Es eso correcto?
sparticvs

Respuestas:


3

Que yo sepa, esto no se puede hacer con stracela ptracefunción que se usa internamente SIGSTOPo SIGINTcon llamadas.

EDITAR:

Inserté esta solución simple en ministrace , por lo que no se requiere codificación.

Mi solución propuesta, si no se requiere toda la funcionalidad de strace, sería modificar el ministrace, que encontré aquí Escríbete un strace en 70 líneas de código .

En un programa de un solo disparo, puede agregar dos líneas antes del siguiente código:

if (wait_for_syscall(child) != 0) break;

Pseudocódigo:

if(syscall == SYS_write)
    do {
        char str[4];
        gets(str);  // waits until enter to continue    
    } while(0);

No he probado nada de esto, te dejo estos pasos finales.


Gracias. Funciona y ese enlace es muy útil. Sin embargo (comprensiblemente en algunas líneas de código), no realiza la decodificación arg que hace gdb / strace, por lo que no habría sido útil para mi propósito. Sin embargo, muestra que se hace fácilmente. Fui por gdb al final, pero parece que parchear strace para esa característica sería relativamente fácil. Dejando la pregunta abierta ya que sospecho que hay un comando existente para hacerlo. Veré python-ptrace cuando tenga tiempo.
Stéphane Chazelas

¡De nada! Me volví un poco loco al extender la implementación, por lo que sería posible hacer referencia a syscall por id y por nombre. Fue divertido jugar con ptrace nuevamente.
Daniël W. Crompton

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.