Equivalente di "truss -T" e "truss -U" su Linux?


12

Esiste un equivalente di ciò che fa l' opzione -Te dell'utilità Solaris su Linux.-Utruss

Quelli devono specificare una chiamata di sistema ( -T) o una funzione di libreria ( -U) che quando viene chiamata dall'applicazione tracciata ne causerebbe l'arresto.

Oppure, detto diversamente, vorrei che qualsiasi processo avviato da un'applicazione tracciata fosse interrotto (come se ucciso da SIGSTOP) non appena effettua una determinata chiamata di sistema o una determinata funzione di libreria condivisa.

stracee ltracesu Linux forniscono gran parte della featureset di Solaris truss, ma non sembrano fare questo.

Per esempio:

truss -f -T open cmd

Sarebbe come strace -f cmdtranne che se il processo in esecuzione cmdo uno qualsiasi dei suoi discendenti fa una openchiamata di sistema, verrebbe interrotto immediatamente (e potrò riprenderlo in seguito a mio piacimento)

In alcuni casi, potrei usare gdb's catch syscall, ma ero alla ricerca di una soluzione che può comodamente seguire forchette e continuare a farlo per tutti i processi biforcuta e continuare a farlo anche dopo execves.

Mi sembra di ricordare qualche utilità che fornisce la stessa funzionalità, anche una (o opzioni a quella stessa utility) ad applicazioni a passaggio singolo tra alcune occorrenze di alcune scale di sistema in remoto come quella, ma la mia memoria mi sta fallendo, non posso nemmeno esserne sicuro quello era su Linux.


1
In realtà non è una risposta alla tua domanda, ma gdb ha alcune opzioni per seguire le forcelle, ma non toglie nulla a un execve. Fa comunque solo un processo alla volta, il che è probabilmente un rompicapo se stai cercando funzionalità simili a stracci, ma ho pensato di menzionarlo per ogni evenienza.
Bratchley,

@JoelDavis, grazie. E sembra che possa anche seguire dopo exec, ( follow-exec-mode), lo sto sperimentando. Non risponde rigorosamente alla domanda, ma può essere abbastanza buono per quello che mi serve.
Stéphane Chazelas,

Se capisco la tua domanda, stai cercando un modo per rintracciare fino a quando non viene visualizzato un segnale specifico e quindi interrompere la traccia, non arrestare o uccidere l'applicazione che stai traccia in alcun modo, giusto?
slm

@slm, no, voglio che un processo avviato da un'applicazione tracciata venga interrotto (come se ucciso da SIGSTOP) non appena effettua una determinata chiamata di sistema. Ho aggiunto un collegamento alla trussmanpage di Solaris .
Stéphane Chazelas,

Fammi accertare di aver capito bene. Volete un modo per fermare un processo quando effettua una specifica chiamata di sistema. È corretto?
sparticvs,

Risposte:


3

Per quanto ne so, non è possibile farlo strace, la ptracefunzione utilizzata internamente fa SIGSTOPo SIGINTsu chiamate.

MODIFICARE:

Ho inserito questa semplice soluzione in ministrace , quindi non è richiesta alcuna codifica.

La mia soluzione proposta, se non fosse richiesta la funzionalità completa di strace, sarebbe quella di modificare la ministrace - che ho trovato qui Scrivi tu stesso uno strace in 70 righe di codice .

In un programma one shot puoi aggiungere due righe prima del seguente codice:

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

Pseudo codice:

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

Non ho notato nulla di tutto ciò, questi passaggi finali sono lasciati a te.


Grazie. Funziona e quel link è molto utile. Tuttavia (comprensibilmente in poche righe di codice), non fa l'arg decodifica che fanno gdb / strace, quindi non sarebbe stato utile per il mio scopo. Dimostra però che è facile da fare. Ho optato per gdb alla fine, ma sembra che l'applicazione di patch per quella funzionalità sia relativamente semplice. Lasciando aperta la domanda, come sospetto, esiste un comando esistente per farlo. Guarderò python-ptrace quando avrò il tempo.
Stéphane Chazelas,

Prego! Sono andato un po 'fuori controllo estendendo l'implementazione, quindi sarebbe possibile fare riferimento al syscall per ID e per nome. È stato divertente suonare di nuovo con ptrace.
Daniël W. Crompton,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.