.NETの「AnyCPU」機能がどのように機能するかはわかっています。システムが32ビットの場合はビット、システムが64ビットの場合は64ビット(タスクマネージャで簡単に確認できます)。明らかに、これは不可能ではありません。Windows用のクロスプラットフォーム(32ビットおよび64ビット互換)プログラムの作成(.NETのAnyCPUなど)
質問は、マイクロソフトがこれをどのように正確に行ったのですか? Windowsはもともと.NETフレームワークについて知らなかったので、Windows PEローダーはおそらくCLRヘッダーのPEヘッダーの余分な機能を探すことはできません。この機能はある種のカーネルモード拡張によって追加されていなければなりません。しかし、.NETフレームワークはそのようなことをインストールしていないようです...私は、同じ実行可能ファイルがネイティブ32ビットと64ビットの同時実行可能性を完全に失っています。特に、mscoree.dllの逆アセンブリ文書化されていないネイティブ関数への参照を表示することさえありません。
これがどのように行われたかについて誰でも知識や妥当な推測がありますか?以下のよう
:それは(「それは不可能です」のようなので、何も言う事)明らかに可能ませんし、それは私がネイティブクロスプラットフォームのEXEを書き込もうとしたくなる...
編集32ビットの実行可能ファイルを64ビットのWindows PE環境で実行する方法を検討してください... にがある場合、PEローダーを「プラグイン」のようなもので拡張または変更する方法があります?
可能であれば、* 64ビットイメージを起動する* 32ビットの実行可能ファイルを配布するいくつかのプログラム(プロセス探査など)があります。例えば。 「AnyCPU」実行可能ファイルは、32ビットPE以外の何ものでもありません。 –
@pst:私はそれらを完全に認識していますが、違っています。 AnyCPUの実行ファイルは、64ビットOSを起動してから64ビットです。アンパックはありません。「このバイトコードを64ビットにJITしてから、64ビットプロセスを再起動してみましょう。それが私を困惑させてしまいます。 – Mehrdad