2010-12-15 18 views
0

私の要件は、入力としてシステムコールのリストを取得し、ファイルリスト内でこれらのシステムコールの出現を検索するツールを書くことです。今、227システムコールのリストを確認しました。ファイル数は膨大なものになる可能性があります。私が今採用しているアルゴリズムは単純なネストされたforループです。そして、当然、プログラムは処理に非常に長い時間がかかります。私はこれを達成するためにシェルスクリプトを使用しています。シェルスクリプトを使用した検索ツール

誰でももっと効率的なアルゴリズムを提案できますか?

ありがとう、 Aditya。

答えて

0

どのような種類のファイルですか?ソースコード?実行可能ファイル?また、実行時に自己修正コードで構築することができます。多くの場合、syscallは潜在的に動的な「データ」であるsyscall番号を持つ汎用カーネルエントリです。したがって、静的ファイルの分析が不完全な程度さらに便利ですか?

システムコールを一般的にファイルの他の内容と区別できるものを識別できる場合は、最初にその内容をチェックして、どれがどれかを把握するか、ツリー検索。

grepを使用して一般的なシステムコールを識別し、そのファイル名と行番号または好きなものを指定してコールを出力できるかどうかを確認してから、システムでsortコール。

また、いくつかの素敵なハッシュ関連の機能を備えたperlのような言語を使用してみることもできます。

+0

私が書いているツールは、あるプラットフォームから別のプラットフォームへアプリケーションを移行するための見積もりに使用されます。 SolarisをHP UXにします。見積もりはすべて粗く正確ではありません。このツールは、必要な変更量を提供します(変更が必要なシステムコールの識別後)。 – Aditya

+0

私の問題はパフォーマンスです。私は多かれ少なかれ全体的なシステムコールリスト(ビルドされているもの)とコードのソースファイルのリストを持っています。 2つのforループを使用する以外は、もう一方はループ内にあります。これを行うより効率的な方法はありますか? – Aditya

0

システムコールは、1行に1つずつ、callsという名前のファイルになります。あなたのファイルのリストは、1行に1つずつ、list_of_filesというファイル内にあります。

cat list_of_files | xargs grep -f calls 
関連する問題