Como sei quais arquivos são executados quando abro um aplicativo?

12

Quero saber o que acontece atrás da tela quando abro algum aplicativo. Por exemplo, quando abro o Firefox, quero saber quais arquivos são lidos e quais são executados. Há alguma maneira de fazer isso. Mesmo abrir o Firefox do terminal não mostra nenhuma informação. Sistema operacional: Ubuntu 12.04

nitishch
fonte

Respostas:

21

Use strace!

Exemplo: Liste todos os arquivos abertos pelo Firefox durante uma sessão:

strace -f firefox 2>&1 | grep 'open('

Isso resulta em algo assim se você abrir uma segunda instância do FireFox: http://pastebin.com/iRqxgiWN (a opção '-f' apenas faz com que o strace siga os garfos do processo).

Exemplo 2: Liste todos os processos executados pelo FireFox:

strace -f firefox 2>&1 | grep -P 'exec[vlpe]*\('

Resulta em algo assim ao visitar o YouTube:

[pid 25020] execve("/usr/lib/firefox/plugin-container", ["/usr/lib/firefox/plugin-containe"..., "/usr/lib/adobe-flashplugin/libfl"..., "-greomni", "/usr/lib/firefox/omni.ja", "-appomni", "/usr/lib/firefox/browser/omni.ja", "-appdir", "/usr/lib/firefox/browser", "15198", "false", "plugin"], [/* 57 vars */]) = 0
[pid 25024] execve("/bin/sh", ["sh", "-c", "ps x | grep netscape"], [/* 57 vars */]) = 0
[pid 25025] execve("/bin/ps", ["ps", "x"], [/* 57 vars */] <unfinished ...>
[pid 25026] execve("/bin/grep", ["grep", "netscape"], [/* 57 vars */]) = 0

Você também pode fazer isso com muitas outras chamadas de sistema ...

Ao corresponder os parâmetros de open()sua greppesquisa, você também pode descobrir em que modo o arquivo foi aberto:

Basta adicionar | grep -P 'O_RDONLY|O_RDWR'(o caractere principal do pipe é importante!) Para filtrar o acesso de leitura ou o acesso | grep -P 'O_WRONLY|O_RDWR'de gravação ao seu comando ...

EDIT :

Como foi mencionado nos comentários, você também pode usar strace -fe open firefoxpara listar todos os arquivos abertos pelo FireFox. Você também pode usar strace -fe trace=file firefoxpara listar todas as operações de arquivo realizadas pelo FireFox que tenham um caminho de arquivo como argumento (aberto, stat, lstat, chmod, acesso, ...).

Muitos mais estão disponíveis! Confira a página de manual do strace (1) .

alexander255
fonte
1
Estou bastante surpreso que o firefox execute um shell para grep "netscape" da lista de processos.
Michael
1
O strace possui amplos recursos internos de filtragem. Tente strace -e openmostrar apenas chamadas para open(), por exemplo.
John Kugelman
@ Michael, gera um shell porque usa um pipe ("|"), que é a sintaxe do shell. Você pode configurar o mesmo canal manualmente a partir do código, mas é muito mais fácil permitir que um shell faça isso - desde que você saiba que não há chance de os códigos de escape do shell serem transmitidos pelo usuário, o que pode levar a vulnerabilidades de segurança.
Alistair Buxton
1

na verdade, existe o modo nomeado como modo detalhado, mas não tenho certeza de que o firefox tenha essa opção. Mas não há problema, todo aplicativo consiste em seu log. Para que você possa verificar a atividade do aplicativo verificando seus dados de log.

Se você deseja habilitar o log do firefox, verifique este

http://bertrandbenoit.blogspot.in/2011/09/activate-logging-for-mozilla.html

todas as atividades de aplicativos no Ubuntu, você pode verificar com seus logs específicos. todos os aplicativos serão registrados no /var/logdiretório

rɑːdʒɑ
fonte