- ベストアンサー
Windowsアプリケーションをメモリーで実行する
EXEファイルをchar*bufと言う変数メモリーにロードして実行する場合の入り口(call又はjmp)アドレスはどこになるでしょうか? winmain()関数のアドレスがわかりません。 通常は実行ファイルをクリックするとOSがDLL等をマシン語に展開して実行しますが、メモリー上での実行はどの様にすればいいでしょうか?
- みんなの回答 (13)
- 専門家の回答
質問者が選んだベストアンサー
>プログラムカウンターのつもりです。 先にも書きましたが、あなた自身にしかわからない造語を使われても他者にはわかりません。 あなたが勝手につくった造語なんて調べてもわかりませんから質問する際には、そのような造語は使うべきではないです。 もちろん回答もですが。 「動かないretcode」が動かない理由に関連する事項は、あなた自身で他の回答者の補足に書いてます。 少なくともその補足の内容を理解してるならわかるはずの理由です。
その他の回答 (12)
- TooManyBugs
- ベストアンサー率27% (1472/5321)
WindowsのEXEファイルは実行形式ではありませんからメモリーにロードしても実行できません。
お礼
早速の回答感謝します。 この問題は幾つかの課題をクリアする必要がありそうです。 絶対アドレスを使わず完全なマシン語に変換し処理内容も吟味した後できそうです。 実行ファイル自体をロードしても出来ない事はよくわかりました。
- zwi
- ベストアンサー率56% (730/1282)
> 暇があればそうしたいのですが、あっと言う間もない人生の終りに近づくと焦ってしまい、かえって逆効果のようですね・・・ハイ。 んじゃなかったけ? なぜ、そんな時間の無駄な勉強が必要なことがしたいの? ちなみにexeファイルは、そのままではアドレス関係か未解決なのでローディング処理をしないと実行出来ません。 と言うことでコメントも定番で、exeファイルの構造とOSの仕組みを勉強してください。あとC/C++のスタートアップの仕組みの理解かな。それをすれば出来るようになります。機械語も分からないと出来ません。
お礼
一番にコメントを頂きながら返事が遅くなり申し訳ありません。 さて、貴殿にはプログラム開発での心構えをご教授頂き感謝しています。 楽をして目的を達成すると言う「ずるい」私ですが、皆様のお力でなんとか課題は解決しております。 これに懲りず今後もよろしくお願い申し上げます。 VC++片手にがんばっています、 >・・・ >ローディング処理 >・・・ 相対アドレス生成はこのコンパイラで可能でしょうか?
- 1
- 2
お礼
お返事が遅くなり申し訳ありません・・・年寄りは早寝早起きがモットーでして・・・ハイ 今回の解決ポイントについご提示頂き感謝いたします。 PECOFFを実行 LoadLibrary,GerProcAddress 例外(提示されたコード) これらのキーワードで勉強の糸口が開けました。 専門用語も満足に知らず基礎勉強もせず、とにかくプログラムしてみて結果よければ自分のものにする結果オーライの繰り返しだったような気がします。 SNSツールが存在する世代に生まれて幸せです。