1

*.ilファイルがあります。その中のすべての空でないメソッド(.method)を見つけたいです。例えば:

.class private auto ansi beforefieldinit MyApp.Program
       extends [mscorlib]System.Object
{
   //catch its body
  .method private hidebysig static void  Main(string[] args) cil managed
  {
    .entrypoint
    // 
    .maxstack  8
    IL_0000:  nop
    IL_0001:  ret
  }  

  //catch its body
  .method public hidebysig specialname rtspecialname 
          instance void  .ctor() cil managed
  {
    // 
    .maxstack  8
    IL_0000:  ldarg.0
    IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
    IL_0006:  ret
  }  

   //don't touch, it's empty
   .method public hidebysig newslot virtual 
          instance string  Invoke(string a) runtime managed
  {
  }  
 //......................................
}

今、私はクラス文字列を使用してそれを行っています。それはまったく非合理的です。使ってみRegexましたが、キャッチするだけのreg式を作成する方法がわかりませんでした。

  • メソッド(クラスではない)
  • 空でないボディを持つメソッドのみ

誰かが私を助けることができますか?

4

1 に答える 1

1

構造コードの解析に正規表現を使用することはお勧めできません。これは悪い習慣です。

正規表現パターンを使用してみてください

(\.method\s[^{]+?)(?=\s*{)(?!\s*{\s*})

ここでテストしてください

各メソッドの本体もキャッチする{...}には、正規表現パターンを使用します

(\.method\s[^{]+{(?!\s*}).*?})

ここでテストしてください


正規表現の詳細については、regular-expressions.infoにアクセスしてください。

于 2012-10-21T16:02:15.333 に答える