1

.NET exe に対して peverify ユーティリティを実行すると、いくつかのエラーが発生します (クラス、メソッドの名前が変更されました)。

[IL]: Error: [myapp.exe : namespace.class::method1][offset 0x00000027]
Instruction cannot be verified.

[IL]: Error: [myapp.exe : namespace.class::method2][offset 0x00000027]
Instruction cannot be verified.

[IL]: Error: [myapp.exe : namespace.class::method3][offset 0x00000313]
Instruction cannot be verified.

これは私が気にするべきことですか?これらのメソッドはすべて unsafe キーワードを使用しており、これがこのエラーの原因であると推測しています。しかし、このエラーに関するドキュメントがオンラインで見つからないため、ご意見をお寄せいただければ幸いです。ありがとう!

4

2 に答える 2

3

unsafeキーワードを使用したからではありません。unsafe を使用したためにコンパイルされたコードを記述したためです。はい、peverify はそのようなコードには抵抗します。それは危険な性質そのものです。ここでケーキを食べて食べることはできません。

于 2010-07-07T17:10:15.913 に答える
1

stackallocそれらの方法で使用しましたか?stackallocこれをいじっていたときに、検証不能なコードが最初に出現した場合、peverify がそのエラー メッセージを吐き出し、残りのメソッドを無視することを発見しました。しかし、その逆は正しくありません。メソッドの後半にある場合、ステートメントstackallocによって生成されたエラーの前に他のエラーが発生します。stackalloc多分それはバグですか?

次の例を考えてみましょう。

public static void Main()
{
  unsafe
  {
    int* a = stackalloc int[100];
    int* b = null;
  }
}

次の結果が得られます。

[IL]: Error: [myassembly.exe : A.Program::Main][offset 0x00000007] Instruction cannot be verified. 
1 Error(s) Verifying myassembly.exe

ただし、行をコメントアウトすると、次のstackalloc結果が得られます。

[IL]: Error: [myassembly.exe : A.Program::Main][offset0x00000004][found Native Int][expected unmanaged pointer] Unexpected type on the stack. 
1 Error(s) Verifying myassembly.exe
于 2010-07-07T19:26:40.920 に答える