2013-12-22 3 views
13

私のプロジェクトで静的コンストラクタに関するいくつかの問題がありました。自分のリソースの復号化メソッドを呼び出すために、静的なコンストラクタをタイプ ""に追加する必要があります。スタティックコンストラクタの作成[Mono.Cecil]

gifの下に、私が遭遇する問題が表示されます。

また、コードスニペットも含めます。 cctorを作成するための enter image description here

コード:

MethodDefinition method = new MethodDefinition(
    ".cctor", 
    Mono.Cecil.MethodAttributes.Private 
    | Mono.Cecil.MethodAttributes.Static 
    | Mono.Cecil.MethodAttributes.HideBySig 
    | Mono.Cecil.MethodAttributes.SpecialName 
    | Mono.Cecil.MethodAttributes.RTSpecialName, 
    mod.Import(typeof(void)) 
); 

は、私はまた、矢野さんとまったく同じに属性を変更しようとしています。それはどういうわけか決して働かない。 「作品」とは、DotNet Resolverの静的なコンストラクタとして検出します。

ここには、実際の結果と期待される結果に関するさらに詳しい情報があります。

enter image description here

私は私のエントリポイントに添付ResolveEventHandlerを持っていません。私はそれを難読化されているアプリケーションに添付しており、それはエントリーポイントが呼び出される前に実行される型の静的コンストラクターにあります。

アプリケーションリソースはAESで暗号化されており、dotnet resolverやその他のデコンパイラによって有効なリソースとして認識されません。私は、リソースが無効であるか不足しているときにトリガされるべきであるため、イベントがトリガされていない理由を単に尋ねています。この例でわかるように、アプリケーションが起動される前にメッセージボックスがポップアップするはずですが、文字列の暗号化によって文字列が暗号化されるため、文字列が見えにくくなります。

何か助けていただければ幸いです。

答えて

5

使用この:

void AddConstructor(TypeDefinition type, MethodReference baseEmptyConstructor) 
{ 
    var methodAttributes = MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName; 
    var method = new MethodDefinition(".ctor", methodAttributes, ModuleDefinition.TypeSystem.Void); 
    method.Body.Instructions.Add(Instruction.Create(OpCodes.Ldarg_0)); 
    method.Body.Instructions.Add(Instruction.Create(OpCodes.Call, baseEmptyConstructor)); 
    method.Body.Instructions.Add(Instruction.Create(OpCodes.Ret)); 
    type.Methods.Add(method); 
} 

あなたも参照できます。

http://www.mono-project.com/Cecil:FAQ

+0

注:.cctor 'に' MethodAttributes.Static'と '.ctor'に' MethodAttributes.Public'を置き換えます'静的なコンストラクタが必要な場合 – Serg046

関連する問題