sneakyevil / IL2CPP_Resolver

A run-time API resolver for IL2CPP Unity.
https://sneakyevil.gitbook.io/il2cpp-resolver/
The Unlicense
365 stars 67 forks source link

Custom iL2CPP Thread il2pp_thread_attach #9

Closed Rednick16 closed 2 years ago

Rednick16 commented 2 years ago

Hmm, the game crashes when i call some functions for example WorldToScreenPoint

but when I hook these functions they work fine any fixes for this?

sneakyevil commented 2 years ago

I knew about this issue since beginning, but never bother to look futher since I have no clue why it happens and especially with different functions. At the moment I just prefer to hook function like OnUpdate of some class or Camera render function and just do stuff there. If you really need to do like World2Screen stuff, then you could take look at matrixes and just read them from Camera and calculate the screen position, instead calling the function.

sneakyevil commented 2 years ago

Anyone who still has problem with this I need some tests on diff games as result:

void* m_pThisThread = IL2CPP::Thread::Attach(IL2CPP::Domain::Get());
/*

Run your code here... 

*/
IL2CPP::Thread::Detach(m_pThisThread);

Instead creating new thread via API create it yourself and run this code in the loop so it attach and deattach.

Rednick16 commented 2 years ago

I did do this a while back and came back to it, it had no effect, I tested it on a mobile game(CriticalOps) and terraria il2cpp steam game, I read some where a dude said he fixed his crashes by calling the il2cpp_thread_attach everytime he was ready to call a Unity function, personally I don’t think this function dose anything useful.

sneakyevil commented 2 years ago

Seems weird since I tried to do simple ESP by just filtering out objects by certain name and calling Camera WorldToScreen function and I got the thread error and after doing attach and doing same thing and detaching it, it didn't popup error anymore.

kashiwazaki2 commented 2 years ago

Seems weird since I tried to do simple ESP by just filtering out objects by certain name and calling Camera WorldToScreen function and I got the thread error and after doing attach and doing same thing and detaching it, it didn't popup error anymore.

Well i tried it as you said to me and i can confirm it does work 100%, tested on Naraka BladePoint no crash/GC Collecting from unknown thread anymore so i guess this is an appropiate fix since i am doing like that on present and yei all works and the best part is i don't need the hook anymore.

HRESULT __fastcall naraka_hooks::hkPresent(IDXGISwapChain* pSwapChain, UINT SyncInterval, UINT Flags)
{
    void* m_pThisThread = IL2CPP::Thread::Attach(IL2CPP::Domain::Get());

        //init imgui things

    ImGui_ImplDX11_NewFrame();
    ImGui_ImplWin32_NewFrame();
    ImGui::NewFrame();

        //render shit

    ImGui::EndFrame();
    ImGui::Render();
    ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());

    IL2CPP::Thread::Detach(m_pThisThread);

    return naraka_hooks::_returns::oPresent(pSwapChain, SyncInterval, Flags);
}
Rednick16 commented 2 years ago

Seems weird since I tried to do simple ESP by just filtering out objects by certain name and calling Camera WorldToScreen function and I got the thread error and after doing attach and doing same thing and detaching it, it didn't popup error anymore.

Well it seems to work I tested it on another game and it worked hahaha no idea what’s happening I guess this is the best way to use this attach method welp dipping thanks for all the help and the tool very helpful

extremeblackliu commented 2 years ago

re-check the repo , added callback to use OnUpdate

kashiwazaki2 commented 2 years ago

Thank you guys for your work, this need update looks dope.

sneakyevil commented 2 years ago

Closing this because callbacks has been added and it is easier to use than threads.