1

すべてのシステム コールを含むstraceによって作成されたファイルがあります。ここで、すべてのシステム コールの名前を取得したいと考えています。したがって、たとえばmprotect4 回リストした場合、リストする必要があるのは 1 回だけです。つまり、一意のシステム コールをリストするだけで済みます。

頭に浮かぶ 1 つの方法は、python または正規表現の解析をサポートするその他の言語を使用して正規表現を使用し、最初にすべてのシステム コールを確認してから重複を排除することです。そのために、まず、notepad++ の検索機能を使用して正規表現をテストしようとしました。こんなものに合わせたいblah(、、、そのために、次の正規表現を考案しました

[a-zA-Z_](

しかし、メモ帳は何も見つかりませんでした。これの正しい正規表現は何だと思いますか?

4

3 に答える 3

7

なぜこれに正規表現が必要だと思いますか? の出力straceは一連の行で、それぞれが次で始まります

<c_identifier>(

および C の識別子には を含めることができないため、システム コールの名前を取得するために(までの部分を取ることができます。(Python では、このワンライナーは一連の個別のシステム コールを計算します。

syscalls = set(ln.split('(', 1)[0] for ln in strace_output)

(Python よりもシェルで作業する場合は、Awk の 1 行でこれを行うこともできます。)

于 2012-05-14T13:58:01.913 に答える
5

Notepad++ は、無効な正規表現を通知する必要があります。最新バージョンはそうです。

正規表現では、括弧には特別な意味があるため、エスケープする必要があります。

[a-zA-Z_]\(

h(括弧内blah(の部分は定量化されていないため(@CharlesDuffyが指摘したように)で見つかります。

全体を一致させるには、次blah(を使用します

[a-zA-Z_]+\(
于 2012-05-14T13:57:46.437 に答える
2

[a-zA-Z_]+\(代わりにすべきです。これは、丸括弧がメタ文字として使用されているためです。

于 2012-05-14T13:57:59.553 に答える