Как узнать, куда пишут все приложения с закрытым исходным кодом? - PullRequest
7 голосов
/ 08 сентября 2010

У меня есть приложение (источник, которого у меня нет), которое можно вызвать из командной строки, например:

$ ./notmyapp

Я хочу знать все места, в которые приложение пишет. Он выводит некоторые файлы в каталог, из которого он вызывается, но мне нужно убедиться, что это единственные файлы, которые создаются.

Итак, мне нужно изолировать приложение, чтобы выяснить, какие файлы были созданы / отредактированы во время его работы.

Как я могу это сделать?

Каким-то образом использовать Perl или C или C ++? У какой-нибудь стандартной библиотеки на этих языках есть способы сделать это?

Ответы [ 5 ]

24 голосов
/ 08 сентября 2010

strace, ktrace / kdump, truss, dtruss или любая другая программа, предоставляемая вашей платформой для отслеживания системных вызовов, - это, вероятно, то, что вы ищете.

Ожидайте много выхода из любого из них. Чтобы выяснить, какие файлы приложение читает и записывает, вы можете ограничить вывод всего несколькими системными вызовами. strace -eopen ./notmyapp, например.

Приложение может также отключать дочерние процессы для выполнения некоторой своей работы. С большинством системных трассировщиков вызовов вам также нужно будет отследить трассировку этих дочерних процессов. С strace это было бы strace -f ./notmyapp.

5 голосов
/ 08 сентября 2010

В системах Unix вы можете использовать strace , чтобы распечатать трассировку всех системных вызовов и сигналов, полученных процессом:

$ strace ./notmyapp

grep может использоваться для ограничения вывода подмножеством системных вызовов:

$ strace ./notmyapp 2>&1 | egrep '(open|write)'
2 голосов
/ 08 сентября 2010

В ответ на ответ rafl вы говорите, что notmyapp должен выдавать подсказку и ждать [...] ввода, прежде чем что-то делать.

Предварительно поместите свои входные данные в простой текстовый файл (скажем,responses.txt), один ввод на строку.Затем используйте strace, как предложено, для отслеживания вызовов на open() или write() трубопровода с содержанием responses.txt:

$ strace -eopen -ewrite ./notmyapp < responses.txt

Если вы ожидаете большого доступа к файлу, то выВозможно, вы захотите передать вывод на ваш любимый пейджер или редактор:

$ strace -eopen -ewrite ./notmyapp < responses.txt | vim -R -

strace - мощный инструмент.За дополнительной информацией обращайтесь man strace.

2 голосов
/ 08 сентября 2010

вы можете использовать strace.

1 голос
/ 08 сентября 2010

Вы можете попробовать запустить его как пользователь, у которого нет прав на запись в любое место на любом диске.Затем вы получите сообщение об ошибке при попытке создать / записать первый файл.Записать этот каталог / файл и дать ему права на запись, затем повторять до тех пор, пока не исчезнут сообщения об ошибках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...