0

MASMアセンブリ言語とILASMの関係(ある場合)はどうですか。1対1の変換はありますか?私はQuantumGISをプログラムに取り込もうとしています。コンピューターにGISがあり、RedGate Reflectorがあり、Visual Studio 2008のオブジェクトブラウザーも、Quantumの.dllの1つ(動作についての強い手がかりがないものの1つ)を開くことができませんでした。MASMアセンブリエディターを使用して同じdllを「開いた」と、そもそも必ずしも理解できるとは思わなかったことが吐き出されました。同じ「コード」を、ILASMとImで相互作用できるものに変換するにはどうすればよいですか?結果的にCsharpで想定されますか?読んでくれてありがとう、そして以前の質問に対するすべての回答...Csharpでのプログラミングに比較的慣れていないImを覚えておいてください。

4

3 に答える 3

1

MASM は x86 命令を扱い、プラットフォーム/プロセッサに依存しますが、ILASM は、プラットフォーム/プロセッサに依存しない .Net CIL (共通中間言語) 命令を参照します。特定のものからより一般的なものへの切り替えは達成するのが難しいため、私の知る限り、MASMからILASMへのコンバーターはありません(逆に、あります!)

于 2010-12-19T00:28:12.047 に答える
1

IL は、ネイティブ コードに対するプラットフォームに依存しない抽象化レイヤーです。.NET プラットフォームで C#、VB.NET、またはその他の .NET 言語で記述されたコードはすべて、IL を含むアセンブリ .EXE/.DLL にコンパイルされます。通常、IL コードが初めて実行されると、.NET ランタイムは NGen を介してそれを実行します。NGen はそれをもう一度ネイティブ コードにコンパイルし、実際に実行される一時的な場所に出力を格納します。これにより、システムのプロセッサやアーキテクチャに関係なく、.NET プラットフォーム コードをその .NET フレームワークをサポートする任意のプラットフォームに展開できます。

これまで見てきたように、IL は C# または VB.NET 形式で簡単にプレビューできるため、Reflector はアセンブリ内のコードを表示するのに最適です。これは、IL は通常、少し上位レベルの命令であり、クラス、メソッド、変数名など、通常はネイティブ コードにはない多くのメタデータが含まれているためです。

Visual Studio プロジェクト プラットフォームを設定するか、アセンブリでNgen.exeを直接呼び出すことにより、.NET プロジェクトをネイティブ コードに直接コンパイルすることもできます。一度完了すると、ネイティブ コードを理解するのは非常に困難です。

于 2010-12-19T00:46:28.880 に答える
0

MASM アセンブリ言語と ILASM の間には何の関係もありません。ネイティブ コードを IL コードに変換する方法がないようです。IL は CLR でのみ理解できますが、MASM アセンブリ言語はネイティブ マシン コードに関するものです。CLR は、実行時に IL をネイティブ コードに変換します。

于 2010-12-19T00:26:40.143 に答える