問題タブ [ildasm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
772 参照

c# - C# コードを機械語命令に逆アセンブルする

コンパイラのパフォーマンスを試しています。非常に小さなコードがあり、浮動小数点の乗算と加算がいくつかあります。コードは数百万回ループで実行されます。C++、c#、java、perl、python ... でコードをコンパイルしようとしています。次に、実行時間を測定しながら結果を実行します。

C# のパフォーマンスにはかなり不満があります。私の c# コードは、同等の C++ または Java よりも約 60% 遅くなります。確かに、私の実験にはバグがあるに違いありません。結果のバイナリを逆アセンブルして、その理由を知りたいと思います。

MSIL コードにそのようなオプションはありますか? c# JIT コンパイラの結果は、マシン命令レベル (MSIL 命令ではなく x86 命令) で調べることができますか?

アップデート

コード (u、v、g* は double、steps は整数)

0 投票する
5 に答える
10725 参照

c# - C# コードを IL にコンパイルすると .ctor() が作成されるのはなぜですか?

この単純な C# コードを使用して、csc hello.cs; ildasm /out=hello.txt hello.exe.

これはildasmのILコードです。

.method public instance void .ctor()コードの用途は何ですか?何もしないようです。

0 投票する
2 に答える
2174 参照

.net - NGen で処理されたアセンブリを (ILDasm を使用して) 逆アセンブルできますか?

アセンブリをNGenした場合、ildasmがまだそれを逆アセンブルするのは正常ですか?

Ok。私は HelloWorld クラス ライブラリを作成しました。その後の dll は NGenILDasmTest.dll という名前です。--> .Net fw 4 を対象としています。

Vs 2010コマンドプロンプトから、私はやった

アセンブリが GAC にインストールされているのが見えました。そして、ildasm を実行して、IL を表示できるようにしました。ここまでは順調ですね。

それから私は走ります

(ngen のオプションは指定しませんでした)。そして、このアセンブリは正常にコンパイルされました。フォルダーの下に NGenILDasmTest.ni.dll という名前で配置しました

さて、以下のようにildasmを実行すると

Ngen-ed アセンブリの内容を見ることができました。これは正常ですか?

技術的に言えば、Ngen は IL のネイティブ CPU 命令を生成します (私の場合は C:\windows\Assembly\NAtiveImages_V4.#####_32 の下にあるようです)。その場合、ILDasm を使用して、NGen で処理されたアセンブリを IL として表示するにはどうすればよいですか?

私がここで見逃している「ちょっとしたこと」を理解するのを手伝ってください。

0 投票する
2 に答える
56 参照

.net - コンパイル済みコードに参照を追加すると、どのような影響がありますか?

.dll ファイルへの参照を追加すると、コンパイルされたプロジェクトの出力はどのように変化しますか?

(参照を追加して再構築したと想像してください。)

0 投票する
1 に答える
357 参照

.net - VisualStudioを使用してソースコードファイルで匿名タイプを見つける方法

(Dotfuscatorを使用して).NETアセンブリを難読化するプロセス中に、名前の変更方法を微調整していることに気付きました。これには、多くの場合、ILDASMでアセンブリを確認し、タイプを定義されているソースコードファイルまでさかのぼって追跡することが含まれます。

通常、これは単純なプロセスです。しかし、匿名タイプを見つけるのは非常に難しいことがわかりました。特に大規模なアセンブリではそうです。

次のコード行など、匿名タイプの場所を検索しようとしている場合:

これは次のようにコンパイルされます:

そして、ILDASMツリーにアセンブリのルートとして表示されます。

ソースコードで匿名タイプを見つけたい場合、私はあまり助けがないままになります:

  • 名前空間なし
  • 検索する記号がありません
  • ソリューションナビゲータには何もありません
  • クラスビューには何もありません
  • オブジェクトブラウザには何もありません

私は何かが足りないのですか?コードファイルで匿名タイプを見つけるのに役立つツールはありますか?

0 投票する
0 に答える
1492 参照

assemblies - ビルドされた .NET アセンブリのバージョン情報を変更する

現在使用している.NETアセンブリのバージョン情報を変更するより良い方法はありますか。

私の現在のアプローチは次のとおりです。

私はildasmでアセンブリを逆アセンブルします:

これにより、Riolo.WebUI.res コンパイル済みリソース ファイルも生成されます。これを Visual Studio のユーザー インターフェイスで開いて変更し、アセンブリをilasmで再アセンブルします。

このプロセスにはさまざまな問題があります。主な理由は明らかに、カロネードの側面で蚊を撃ちたいと思っていることと、コマンド ラインを使用して.resファイルを.rcファイルに逆コンパイルする方法がわからないため、コマンド ラインを使用できないことです。これは、ファイルを変更するために Visual Studio を開く必要があるため.resです。これは、非常に時間がかかり、エラーが発生しやすいことを意味します。 、したがって、まだ予期しないシナリオで早期または後で噛まれるのではないかと心配しています.

0 投票する
1 に答える
662 参照

c# - ExportDll で ildasm/ilasm を実行した後、アセンブリのコード カバレッジを取得するにはどうすればよいですか?

C# アセンブリでビルド後の手順を使用して、dll から関数シグネチャを公開しています。この手順では、 http://www.codeproject.com/KB/dotnet/DllExport.aspxの ExportDll ツールを使用します。ただし、mstest を使用して dll を実行し、コード カバレッジ レポートを取得しようとすると、次のエラーが発生します。

(いくつかの P/Invoke シグネチャを除いて) アセンブリにアンマネージ コードがないことを考えると、これは奇妙です。ビルド後の手順を実行すると、コードが適切に計測され、コード カバレッジ レポートを取得できます。したがって、それはこのビルド後のステップであり、コード自体の何かではないとしか言​​えません。

私は、ExportDll 後のバージョンをビルドして配布しながら、ExportDll 以外のバージョンのコードを使用して単体テストを実行するという考えに傾倒しています。他のコンポーネントが DLL エクスポートを介して関数を見つけることができるかどうかよりも、コードがテストされているかどうかに主に関心があるので、これが悪い解決策だとは思いません。ただし、ビルド管理の悪夢であり、チームに「そのアセンブリではなく、このアセンブリを使用する」と説明する必要があると感じています。

このツールで実行された dll の単体テストを行った経験のある人はいますか? あるいは、ildasm/ilasm を使用してコンパイル、逆コンパイル、および再アセンブルされたアセンブリを計測した経験のある人はいますか?

0 投票する
1 に答える
1464 参照

.net - ildasm、次に同じメタデータを持つilasm

アセンブリにパッチを適用する必要があり、現時点ではソースコードから再構築できません。ildasm mydll.dll /all /out=mydll.ilを使用してILをダンプしてから、ilasm / dll mydll.ilを使用して再構築できます。ファイルのバージョン、公開鍵などがすべて欠落していることを除けば、すべて問題ありません。新しいバイナリ。これらを追加するようにilasmに指示するにはどうすればよいですか?運が悪かったので/mdvスイッチを試しました。

0 投票する
1 に答える
285 参照

crash-dumps - クラッシュ ダンプ分析: クラッシュの原因となっているモジュールと命令を見つける方法

クラッシュ ダンプ ファイルがあり、MSMQ の問題が疑われるため、クラッシュが発生した正確な命令 (より正確には「System_Messaging_ni+60e4e」) を特定したいと考えています。

私の理解では、「System_Messaging_ni+60e4e」は「モジュール「System_Messaging_ni」の先頭からバイト オフセット 0x60e4e にある命令」を意味します。

「System_Messaging_ni」が参照する正確な DLL ファイルを特定するにはどうすればよいですか? システムに System.Message.ni.dll が見つかりませんでした。_ni サフィックスは何を意味しますか? オフセットの命令が IL かネイティブ コードかを確認するにはどうすればよいですか? 命令が IL にある場合、ILDASM を使用して正確な場所を特定できますか?

助けてくれてありがとう!

0 投票する
1 に答える
189 参照

c# - .NETランタイム処理ジェネリックコード

.NETランタイムはジェネリックコードをどのように処理しますか?

一般的なサポートを可能にする特別な構造がMSILにありますか?

ILDASMまたはReflectionを使用して見つけることができますか?はいの場合、どのように?