ゲームの拡張を可能にするこれらのツールのほとんどは、多かれ少なかれコンピュータ ウイルスのように機能します。彼らは自分のコードを注入するために元のコードを変更しますが、そのコードはコンピュータを破壊するような意地悪なことではなく、キャラクターの鎧を強化するなどの素晴らしいことを行います。ただし、原則として、使用される手法は同じです。
残念ながら、コンピュータ ウイルスの作成方法を詳細に説明すると、明らかにスタック オーバーフローの利用規約に違反することになります。モッディング自体でさえ、法的に疑わしい問題を抱えている可能性があります。
リバース エンジニアリングの法的問題に関する FAQ:
https://www.eff.org/issues/coders/reverse-engineering-faq
しかし、できれば禁止されることなく正しい方向に向けるために、いくつかの一般論をお伝えできます.
他人がコンパイルしたソフトウェアを変更することは、基本的にオブジェクト コードをデバッグする技術です。コードの機能を理解できれば、コードの機能を変更できます。そのため、C デバッガーのドキュメントを読むことから始めるのが最善の方法です。デバッガーの学習の一環として、アセンブリ コードも学習する必要があります。専門家である必要はありませんが、基本を知っておく必要があります。デバッガーを真にマスターできれば、後は簡単です。
だから、これ以上苦労せずに...
改造者の禁止読書リスト
Shim (コンピューティング):
http://en.wikipedia.org/wiki/Shim_(コンピューティング)
DLL インジェクション:
http://en.wikipedia.org/wiki/DLL_injection
依存関係ウォーカー:
http://en.wikipedia.org/wiki/Dependency_Walker
ダイナミック リンク ライブラリの検索順序:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx
PE ファイル形式: (Windows)
http://en.wikipedia.org/wiki/Portable_Executable
Microsoft PE および COFF 仕様:
http://msdn.microsoft.com/en-us/windows/hardware/gg463119.aspx
ELF ファイル形式: (Linux、一部のゲーム コンソール、コイン操作)
http://en.wikipedia.org/wiki/Executable_and_Linkable_Format
名前マングリング:
http://en.wikipedia.org/wiki/Name_mangling
DllMain で恐ろしいことをしてはいけないいくつかの理由: (あなたの場合を除いて...)
http://blogs.msdn.com/b/oldnewthing/archive/2004/01/27/63401.aspx
GetProcAddress 関数:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms683212%28v=vs.85%29.aspx
手動によるスタックのウォーク:
http://msdn.microsoft.com/en-US/library/windows/hardware/ff552143(v=vs.85).aspx
Windows 用デバッグ ツール (DDK):
http://msdn.microsoft.com/library/windows/hardware/ff551063(v=vs.85).aspx
メモリ ウィンドウ: (メモリの内容を表示)
http://msdn.microsoft.com/en-us/library/s3aw423e(v=vs.120).aspx
dllを使用してアドレス空間に入る代わりに...
バッファ オーバーフロー: (最近はソフトウェアよりも脱獄 ROM 向け)
http://en.wikipedia.org/wiki/Buffer_overflow
命令の再配置: (「古い学校」)
http://en.wikipedia.org/wiki/Relocation_%28computing%29
リベース: (「古い学校」)
http://en.wikipedia.org/wiki/Rebasing
アクセシビリティ API
より制限された選択肢ではありますが、クリーンで合法的な方法をお勧めします: アクセシビリティ フックです。アクセシビリティ機能の実装は、ブードゥー教や魔術の知識がなくても、有能なプログラマーなら誰でも実現できます。
Windows アクセシビリティ API:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd373592%28v=vs.85%29.aspx
Android アクセシビリティ サービス:
http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html
アクセシビリティ機能は、オペレーティング システムによって配置される "フック" であり、目の不自由なユーザーや麻痺したユーザーなどの障害のあるユーザーが、ソフトウェアを一般的に "変更" するツールを使用できるようにします。これは、ユーザーが見ることができないため UI を読み上げるスクリーン リーダーなどの機能を追加するためです。
フックは特にボタンの押下などに応答することを目的としていますが、多くの創造的な方法でこれらを悪用できます。たとえば、ホットキー機能が組み込まれていないプログラムにホットキーを追加するアクセシビリティ フックを作成できます。
アクセシビリティ フックは、最もクリーンで責任ある方法です。プログラム バイナリを変更する必要はありません。アクセシビリティ フックは、ソフトウェアの動作を変更できるようにすることを目的としています。最も重要なことは、アクセシビリティ フックを設計どおりに使用する場合、元のソフトウェアをリバース エンジニアリングしたり、EULA に違反したりする必要がないことです。
ただし、制限があります。一部の (多くの) ゲームは、オペレーティング システムを介してボタンをバックエンドすることなく、画面に直接描画します。または、マウスイベントなどを介さずにハードウェアに直接アクセスします。通常、障害を認識している企業は、これをオフにするモードまたは代替手段を提供します。たとえば、AMD Cataylst では、CCC コントロール パネルのウィンドウ ドレッシングをオフにして、アクセシビリティ ツールと連携させることができます。一部のゲームは画面に直接描画しますが、ボタン イベントとテキスト ラベルでオペレーティング システムに通知するため、スクリーン リーダーは動作します。Valve は直接アクセスを行いますが、独自のクローズド キャプションを実装しました。それはコード品質の問題です。残念ながら、多くの人は障害者について考えていません。それは本当にゲームに依存します。
そのため、可能であれば、ゲームがサポートしているオペレーティング システムのアクセシビリティ機能を使用してください。