Skip to content

i-saint/PatchLibrary

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
bin
 
 
 
 

PatchLibrary

C++ ソースの変更を実行中のプログラムに反映させるライブラリ&ツールです。
変更を反映させたい部分は DLL に分離されている必要があり、主な用途としてはプラグインの開発中にホストプログラムを再起動することなく変更を反映させ、トライ&エラーのサイクルを早める、といったものを想定しています。

Test 以下には Unity のプラグインを実行中に更新する簡単なテストプロジェクトが含まれています。
TestUnityProject を Unity で開いた状態で TestUnityPlugin をビルドすると、その変更がリアルタイムに反映されます。
TestUnityPlugin プロジェクトはビルドイベント (ビルド後イベント) でこのツールを呼び、Unity.exe のプロセスに対して変更を適用しています。

正確には、このツールは対象のプロセスがロードしている DLL の関数を差し替える、ということをします。
DLL Injection を用いて対象プロセスに新しい DLL をロードさせ、旧 DLL の export 関数テーブルを新しい DLL の関数へ書き換えることで更新を実現しています。
このため、ネイティブコードの DLL であれば C++ に限らず変更を適用できます。また、新しい DLL で新規に追加された export 関数はホストプログラムは認識できず、こういうケースでは再起動が必要になります。

より技術的な詳細に興味があれば、以下のプロジェクトや blog 記事が参考になると思われます。
https://github.com/i-saint/DynamicPatcher (本ツールはこれの簡易版的なものです)
http://i-saint.hatenablog.com/entry/2013/06/06/212515

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages