BepInEx / Il2CppInterop

A tool interoperate between CoreCLR and Il2Cpp at runtime
GNU Lesser General Public License v3.0
185 stars 59 forks source link

Added an Il2CppMethodAttribute to store il2cpp function RVAs #99

Open slxdy opened 1 year ago

slxdy commented 1 year ago

This might be a big change, so consider this just as a prototype for now. Basically, I created a new attribute that's applied to all generated methods, which stores native function RVAs.

Why? The huge advantage of this is that you're able to get il2cpp function pointers before il2cpp is fully initialized. My main reason for creating this is that I'm creating my own il2cpp detour method, and I want it to be able to hook methods before all il2cpp assemblies and all that other stuff are loaded.

In the attribute, I left a suggestion that the attribute may also be a good place to store unobfuscated method names, but I decided not to implement this yet, considering that would drastically impact the sizes of obfuscated assemblies.

So idk, lmk if this is a good idea, but I'd be grateful if it got approved.

Note: I also fixed Cpp2IL type stripping. I believe the newer versions of Cpp2IL use a slightly different namespace.

Kasuromi commented 1 year ago

The huge advantage of this is that you're able to get il2cpp function pointers before il2cpp is fully initialized.

What gives? The Il2CppInterop runtime must be boostrapped after il2cpp_init, and at that point all metadata is loaded allowing you to resolve everything at runtime.