Skip to content

Load an assembly in Unity at runtime

License

Notifications You must be signed in to change notification settings

HearthSim/dynity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dynity - Dynamic assembly loader for Unity

This is a quick proof of concept runtime assembly loader for Hearthstone.

It primarily functions by calling exports of mono.dll to load a new assembly and run a static method.

It also has a simple hook that allows debugging Hearthstone in the Visual Studio Tools for Unity. To set this up:

  • Build the dynity solution to produce Inject.exe and dynity.dll.
  • Build the Test solution. You'll need to edit the paths in populate_lib.bat and the Post-Build Event to point to your Hearthstone directory, and then run populate_lib to copy dlls from Hearthstone to the lib folder.
  • Set the environment variable UNITY_GIVE_CHANCE_TO_ATTACH_DEBUGGER to 1. You will need to restart Agent.exe and Battle.net.exe for this environment change to take effect on Hearthstone.
  • Start Hearthstone. A Message Box should appear, reading You can attach a debugger now if you want. Run Inject.exe, then once the console window for dynity appears (it should read mono successfully loaded), press Ok.
  • In the Test solution, go to Debug > Attach Unity Debugger.
  • Click on Input IP, the default port of 56000 is correct, so just press Ok.
  • Now you should be able to place a breakpoint in the code of Test.dll, for example at the installed MonoBehaviour's Update() (Test.FrameBehaviour:Update) method, and it should be hit. From there, I was able to use QuickWatch to look at everything in Assembly-CSharp. Note, however, that you are not be able to place breakpoints in Assembly-CSharp, as there is no .mdb file for it. The requirement of the .mdb file to place breakpoints is the reason for pdb2mdb's inclusion as a post-build event.

Screenshots

Debugging in Visual Studio Tools for Unity

Debugging Example

License information

dynity is MIT licensed

pdb2mdb (https://gist.github.com/jbevain/ba23149da8369e4a966f)

  • pdb2mdb is licensed under the Microsoft Public License (Ms-PL).
  • Mono.Cecil is licensed under the MIT/X11 license.

The source is available in the mono project repository.

mono bindings

About

Load an assembly in Unity at runtime

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published