Update Ryujinx.cpp

Update Ryujinx.cpp

Update Ryujinx.cpp

Update Ryujinx.cpp
This commit is contained in:
恍兮惚兮 2024-09-22 23:24:26 +08:00
parent 3ea04fd36b
commit b7254033d6
4 changed files with 104 additions and 1 deletions

View File

@ -1,6 +1,6 @@
include_directories(. util engines) include_directories(. util engines)
if(${CMAKE_SIZEOF_VOID_P} EQUAL 8) if(${CMAKE_SIZEOF_VOID_P} EQUAL 8)
set(enginessrc livecaptions Kincaid vita3k rpcs3 yuzusuyu TYPEMOON ENTERGRAM AGES7 mono Godot 5pb lucasystem LightVN V8 pchooks Artemis KiriKiri YOX PPSSPP CMVS Suika2 ) set(enginessrc Ryujinx livecaptions Kincaid vita3k rpcs3 yuzusuyu TYPEMOON ENTERGRAM AGES7 mono Godot 5pb lucasystem LightVN V8 pchooks Artemis KiriKiri YOX PPSSPP CMVS Suika2 )
set(enginepath "engine64") set(enginepath "engine64")
set(collector "enginecollection64.cpp") set(collector "enginecollection64.cpp")
else() else()

View File

@ -0,0 +1,83 @@
#include "Ryujinx.h"
namespace
{
/*
const char* CEEInfo::getMethodNameFromMetadata(CORINFO_METHOD_HANDLE ftnHnd,
const char** className,
const char** namespaceName,
const char** enclosingClassNames,
size_t maxEnclosingClassNames)
*/
/*
CorJitResult CILJit::compileMethod(ICorJitInfo* compHnd,
CORINFO_METHOD_INFO* methodInfo,
unsigned flags,
uint8_t** entryAddress,
uint32_t* nativeSizeOfCode)
*/
/*
CorJitResult invokeCompileMethodHelper(EEJitManager *jitMgr,
CEEInfo *comp,
struct CORINFO_METHOD_INFO *info,
CORJIT_FLAGS jitFlags,
BYTE **nativeEntry,
uint32_t *nativeSizeOfCode)
*/
struct CEEInfo;
struct CORINFO_METHOD_HANDLE;
struct CORINFO_METHOD_INFO
{
CORINFO_METHOD_HANDLE *ftn;
// CORINFO_MODULE_HANDLE scope;
// uint8_t *ILCode;
// unsigned ILCodeSize;
// unsigned maxStack;
// unsigned EHcount;
// CorInfoOptions options;
// CorInfoRegionKind regionKind;
// CORINFO_SIG_INFO args;
// CORINFO_SIG_INFO locals;
};
const char *(*getMethodNameFromMetadata)(CEEInfo *, CORINFO_METHOD_HANDLE *, const char **, const char **, const char **) = 0;
}
bool Ryujinx::attach_function()
{
auto invokeCompileMethodHelper = processStartAddress + 0x84CC0;
getMethodNameFromMetadata = (decltype(getMethodNameFromMetadata))(processStartAddress + 0x7AED0);
HookParam hp;
hp.address = invokeCompileMethodHelper;
hp.text_fun = [](hook_stack *stack, HookParam *hp, uintptr_t *data, uintptr_t *split, size_t *len)
{
auto methodInfo = (CORINFO_METHOD_INFO *)stack->r8;
const char *className;
const char *namespaceName;
const char *enclosingClassName;
auto methodname = getMethodNameFromMetadata((CEEInfo *)stack->rdx, methodInfo->ftn, &className, &namespaceName, &enclosingClassName);
if (!methodname)
return;
if (strcmp(methodname, "RegisterFunction") != 0)
return;
ConsoleOutput("%s %s %s %s", className, namespaceName, enclosingClassName, methodname);
HookParam hpinternal;
hpinternal.user_value = stack->stack[5]; // entryAddress->RegisterFunction
hpinternal.address = stack->retaddr;
hpinternal.text_fun = [](hook_stack *stack, HookParam *hp, uintptr_t *data, uintptr_t *split, size_t *len)
{
HookParam hp_cs_function;
hp_cs_function.address = *(uintptr_t *)hp->user_value;
hp_cs_function.text_fun = [](hook_stack *stack, HookParam *hp, uintptr_t *data, uintptr_t *split, size_t *len)
{
ConsoleOutput("%p %p %p %p %p %p", stack->rcx, stack->rdx, stack->r8, stack->r9, stack->r10, stack->r11);
};
NewHook(hp_cs_function, "RegisterFunction");
hp->type = HOOK_EMPTY;
};
NewHook(hpinternal, "invokeCompileMethodHelper Return");
};
return NewHook(hp, "invokeCompileMethodHelper");
}

View File

@ -0,0 +1,18 @@
class Ryujinx : public ENGINE
{
public:
Ryujinx()
{
check_by = CHECK_BY::FILE;
is_engine_certain = false;
check_by = CHECK_BY::CUSTOM;
check_by_target = []()
{
return wcscmp(processName_lower, L"ryujinx.exe") == 0;
};
};
bool attach_function();
};

View File

@ -17,6 +17,7 @@
#include "engine64/Kincaid.h" #include "engine64/Kincaid.h"
#include "engine64/LightVN.h" #include "engine64/LightVN.h"
#include "engine64/yuzusuyu.h" #include "engine64/yuzusuyu.h"
#include "engine64/Ryujinx.h"
#include "engine64/vita3k.h" #include "engine64/vita3k.h"
#include "engine64/rpcs3.h" #include "engine64/rpcs3.h"
#include "engines/lua/lua51.h" #include "engines/lua/lua51.h"
@ -47,5 +48,6 @@ std::vector<ENGINE *> check_engines()
new Kincaid, new Kincaid,
new livecaptions, new livecaptions,
new lua51, new lua51,
new Ryujinx
}; };
} }