• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:プログラム実行中にプログラムを書き換えるには?)

プログラム実行中にプログラムを書き換えるには?

このQ&Aのポイント
  • プログラム実行中に、プログラムの一部を書き換えて保存する方法を教えてください。
  • プログラムを書き換えて実行中に更新する方法を教えてください。
  • プログラム実行中に、プログラムの特定の部分を変更して実行結果を反映させる方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

実行中のファイルは、Windowsによってロックされているため、書き込みを行うことはできません。 また、文字列部分のみを書き換えても、実行ファイルが破損していないかチェックするための値があり、実行時にチェックされるため、ファイルが壊れていると判定されて実行できなくなります。 他の方法を考えましょう。

nazoda
質問者

お礼

回答ありがとうございます。参考になりました。

その他の回答 (7)

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.8

#4,#7です。 あと、自己解凍ファイルなどで使われている方法ですが、EXEファイルの後ろにデータを追加する方法があります。 ただ、実行中の自分自身のEXEファイルを書き換えることはできないので、バッチファイルなどを使うことになるので、余計なファイルを作らないという方針からは遠ざかりますね。

nazoda
質問者

お礼

いろいろな方法を教えていただきありがとうございました。

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.7

#4です。 ファイルを作りたくないのであれば、レジストリを使うのもいいと思います。 最近はあまり流行らないようですが、使用には問題ないはずです。

回答No.5

初期値変更だけのために、ソース書き換えてコンパイルなんてトリッキーなことしなくても 変更時や終了時にINIファイルに次回の初期値を保存しておいて 再実行時にはGetPrivateProfileInt()とかを使って INIファイルから初期値を読み込むようにプログラムするだけでよいのでは?

nazoda
質問者

お礼

回答ありがとうございます。余計なファイルは増やさないで1つのファイルにしたかったのですがやはりそれが無難な方法のようですね。

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.4

そんなことは無理なので、通常はiniファイルとかを使います。 http://wisdom.sakura.ne.jp/system/winapi/win32/win156.html

nazoda
質問者

お礼

回答ありがとうございます。いい方法がない場合はiniファイルの方法でやってみたいと思います。

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.3

APIフックでいいのでは。

参考URL:
https://gist.github.com/kumatti1/3dd953e6272f176469bb
nazoda
質問者

お礼

回答ありがとうございます。APIフックについてはまだ全然わからないのでこれから勉強してみたいと思います。

  • yama1718
  • ベストアンサー率41% (670/1618)
回答No.2

普通の方法は、メインのプログラムからアップデート用のサブプログラムを起動してメインは終了させます。 サブプログラムはメインプログラムを書き変えてから(多くは最新版をネットからダウンロードして上書きしたり、パッチを当てたり)、メインを再起動します。 質問のプログラム中の文字列だけを書き変えるならリソースをいじる事になりますね。 プログラムの自己書き変えは昔はよく使われていたけど、一つ間違えば暴走するリスキーな方法ですし、ウィルスやマルウェアなどの不正プログラムが行う動作と同じなので、最近ではOSやシステムが保護してブロックしたり警告が出たりします。

nazoda
質問者

お礼

回答ありがとうございます。参考になりました。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

ソースプログラムを書き換えた後、コンパイルし直さないといけないということは認識されていますか? 普通は、別ファイルにして読み込みます。

nazoda
質問者

お礼

回答ありがとうございます。出来上がったexeファイルには変数の値が書き込まれている部分があると思うのでそこを書き換え、上書きすればいいと単純に考えたのですが、それは無理なのですね。