2010-12-15 4 views
0

Мое требование - написать инструмент, который принимает в качестве входных данных список системных вызовов, а затем ищет вхождения этих системных вызовов в список файлов. Сейчас мы определили список из 227 системных вызовов. Количество файлов может быть огромным. Алгоритм, который я использовал сейчас, представляет собой простой вложенный цикл. И понятно, что программа занимает очень много времени для обработки. Для этого я использую shell-скрипты.Инструмент поиска с использованием сценария оболочки

Может кто-нибудь предложить лучший/эффективный алгоритм для этого?

Thank you, Aditya.

ответ

0

Какие файлы? Исходный код? Исполняемые? Кроме того, syscall можно построить во время выполнения с самомодифицирующимся кодом, и во многих случаях syscall является общей записью ядра с номером syscall, который является потенциально динамическим «данным», так же как степень, в которой анализ статических файлов может быть неполным даже полезно?

Если вы можете идентифицировать что-то, что отличает системный вызов в общем от другого содержимого файла, вы можете сначала проверить это, а затем выяснить, какой из них он представляет, либо путем сравнения грубой силы, либо каким-то образом поиск дерева.

Еще одна идея может заключаться в том, чтобы увидеть, можно ли использовать grep для идентификации системных вызовов в целом и вывести вызов с его именем файла и номером строки или любым другим, что вам нравится, а затем посмотреть, можете ли вы просто использовать сортировку по системе вызов.

Возможно, вы также захотите посмотреть на язык, подобный perl, который имеет некоторые хорошие возможности, связанные с хэшем.

+0

Инструмент, который я пишу, будет использоваться для оценок, предназначенных для переноса приложений с одной платформы на другую. Скажите Solaris HP UX. Оценки все грубые и неточно. Этот инструмент обеспечит требуемый объем изменений (после определения необходимости изменения системных вызовов). – Aditya

+0

Моя проблема здесь - производительность. У меня есть более или менее целостный список системных вызовов (те, что находятся в построении) и список исходных файлов на данном фрагменте кода. Кроме использования двух для циклов, один внутри другого. Есть ли более эффективный способ сделать это? – Aditya

0

Ваши системные вызовы будут находиться в файле с именем calls, по одному на строку. Ваш список файлов находится в файле с именем list_of_files, по одному на строку.

cat list_of_files | xargs grep -f calls 
Смежные вопросы