私がやろうとしているのは、ゲームとゲームを更新するランチャーを作成することです。
このランチャーは、ゲームの .exe ファイルを上書きせずにゲームを更新します。
これはdllを使用することで可能だと思っていましたが、どこでこれを学ぶべきかわかりません...
これは可能ですか?
実行可能ファイル(ゲームやその他のプログラム)を変更せずに、実行中のプロセスのメモリを変更したいと思っているように思えます。
kernel32.dllライブラリに属するReadProcessMemoryおよびWriteProcessMemoryAPI呼び出しを使用して、実行中のプロセスのメモリの読み取りと書き込みを行うことができます。また、メモリの読み取りと書き込みを行う前に、OpenProcessを使用してプロセスへの有効なハンドルを作成する必要があります。
使用している言語によっては、それらにアクセスするのは非常に簡単です。C#では、次の構文を使用してDLLインポートを宣言する必要があります。
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll")]
public static extern bool ReadProcessMemory(IntPtr hProcess, int lpBaseAddress, ref byte[] buffer, int size, ref int lpNumberOfBytesRead);
[DllImport("kernel32.dll")]
public static extern bool WriteProcessMemory(IntPtr hProcess, int lpBaseAddress, ref byte[] buffer, int size, ref int lpNumberOfBytesWritten);
次に、OpenProcessを使用してプロセスへのハンドルを取得し、ReadProcessMemoryとWriteProcessMemoryを適切に使用してメモリの読み取りと書き込みを行います。
OLLYDBGなどのデバッグツールを使用して、編集するメモリの場所を見つけるのに役立てることができます。もう1つの優れたツールはArtMoneyです。これを使用すると、実行中のプロセスで値を監視および追跡して、お金や健康状態などのゲーム情報を格納する場所を特定できます。
さらに支援が必要な場合は、正確に何をしているかについての情報を追加すると役立つ場合があります。
dll プロジェクトの作成方法を学習できるソースは多数あります。
Microsoft チュートリアルから始めます - http://msdn.microsoft.com/en-us/library/ms235636(v=vs.100).aspx
最初からゲームのデザインを慎重に検討してください。より管理しやすく、簡単に更新できるようにするには、ゲームをコア部分 (物理、レンダリングなど) に分割し、これらを dll として保持することをお勧めします。
後でレンダラーをアップグレードする場合は、dll を交換するか、クライアント マシンでレンダラー dll を上書きする Launcher を用意するだけで済みます。
dll を使用することのいくつかの欠点は、より多くのファイルを使用してゲームを出荷する必要があることと、エンド ユーザーが独自の改造目的で dll をラップする方が簡単であることに気付く可能性があることです (ただし、ゲームを改造可能にすることはプラスだと思いますか?)。