2016-10-26 16 views
0

ildasmの出力をjsonやxmlのようにすると、やや簡単にプログラムで読むことができます。ildasmの出力をプログラムで読み込む最良の方法

出力を1行ずつ読み込み、クラスやメソッドなどをリストに追加してから、それを変更してXMLとして書き直して読んだりする方法でした。

質問:よりスマートで簡単な出力方法はありますか?

+0

*出力*の例と、それに何をしたいかを示します。現在私は[this](http://stackoverflow.com/q/6792828/1997232)と[this](http://stackoverflow.com/q/284324/1997232)の間で選択することはできません* vs *不明瞭*)。 – Sinatr

+2

なぜildasm経由ですか?バイナリを直接読みやすくなりました。セシルは助けるかもしれない図書館です。 https://github.com/jbevain/cecil/wiki – adrianm

+0

'ildasm'の出力は、' ilasm'以外のプログラムによって読み込まれることを意図していません。そういうわけで、狂気がある。 –

答えて

1

ILコードを読んでクラスとメソッドのリストを取得する方法があります。 私は言っている解決策は少し長いかもしれないが、それは動作します。

ILは.exeまたは.dll以外は何もありません。まず、ILSpyを使用してこれをC#またはVBに変換してみてください。このツールをダウンロードしてDLLを開きます。このツールは、ILコードをC#またはVBに変換できます。

変換後、変換されたコードをtxtファイルに保存します。

次にテキストファイルを読み、その中のクラスとメソッドを探します。ラインで

反復ファイルラインを通って、ラインが名前"クラス"を持っているかどうかをチェックします。クラス名を読み取るには

MatchCollection mc = Regex.Matches(str, @"(\s)([A-Z]+[a-z]+[A-Z]*)+\("); 

:メソッド名を読み取ること

。名前があれば値を分割し、「クラス」の後ろにある値/テキストを格納します。これはクラス名以外です。

完全なコード:

static void Main(string[] args) 
    { 
     string line; 
     List<string> classLst = new List<string>(); 
     List<string> methodLst = new List<string>(); 
     System.IO.StreamReader file = new System.IO.StreamReader(@"C:\Users\******\Desktop\TreeView.txt"); 
     string str = File.ReadAllText(@"C:\Users\*******\Desktop\TreeView.txt"); 

     while ((line = file.ReadLine()) != null) 
     {  
       if (line.Contains("class")&&!line.Contains("///")) 
       { 
        // for finding class names 

        int si = line.IndexOf("class"); 
        string followstring = line.Substring(si); 
        if (!string.IsNullOrEmpty(followstring)) 
        { 
         string[] spilts = followstring.Split(' '); 

         if(spilts.Length>1) 
         { 
          classLst.Add(spilts[1].ToString()); 
         } 

        } 
       } 
     } 
     MatchCollection mc = Regex.Matches(str, @"(\s)([A-Z]+[a-z]+[A-Z]*)+\("); 

     foreach (Match m in mc) 
     { 
      methodLst.Add(m.ToString().Substring(1, m.ToString().Length - 2)); 
      //Console.WriteLine(m.ToString().Substring(1, m.ToString().Length - 2)); 
     } 

     file.Close(); 
     Console.WriteLine("******** classes ***********"); 
     foreach (var item in classLst) 
     { 
      Console.WriteLine(item); 
     } 
     Console.WriteLine("******** end of classes ***********"); 

     Console.WriteLine("******** methods ***********"); 
     foreach (var item in methodLst) 
     { 
      Console.WriteLine(item); 
     } 

     Console.WriteLine("******** end of methods ***********"); 
     Console.ReadKey(); 

    } 

ここで私は、リスト内のクラス名やメソッド名を格納しています。上記のように後でXMLまたはJSONに格納することができます。

問題が発生した場合は、私たちにpingしてください。

関連する問題