2011-10-09 7 views
0

関数を含むバイト配列に仮想メモリを割り当て、メモリに配列を書き込んだり、何らかの形で仮想メモリ内の関数を実行することはできますか?メモリにまっすぐにバイト配列の機能?

+0

"fuctionを含むバイト配列"は、非常に広い仕様です。どのような表現ですか?どのオペレーティングシステムですか?どのようなハードウェアアーキテクチャですか?あなたの質問は、大きな説明がなければ答えられません。 –

+0

特定のプログラミング言語はありますか? – GolezTrol

+0

C++。 Windows。表現は機械コード(またはこれまでのもの)にあります。 x86とx86-64の両方 – replicant

答えて

0

実行しようとしているバイトが本当に有効なCPU命令であることを確認する必要があります。そうしないと、「違法命令」、「アクセス違反」などの例外が発生するなど、

次の作業は、問題のバイトが実行権限を持つメモリ内にあることを確認することです。 VirtualProtectPAGE_EXECUTEを入力してください。

次に、実際にコントロールを自分の関数に渡す必要があります。これはアセンブリコードとすることができる。 push <address>; ret;または変数のアドレスを持つ静的関数のC++スタイルの呼び出し。

+0

アドレスを含むポインタを使用して静的関数を呼び出す方法についてもう少し説明してください。 – replicant

+0

'GetProcAddress' APIを介して関数のアドレスを取得する方法と同様に、必要な型にキャストします。あなたの場合、この関数のエントリポイントはあなたのデータ配列になります。 –

+0

hModuleパラメータで何を使用しますか?現在のプロセスのハンドル? – replicant

関連する問題