2019-01-01 18:44:27 -05:00
# include "match.h"
2018-12-21 10:10:51 -05:00
# include "main.h"
# include "native/pchooks.h"
2019-06-09 00:50:26 -04:00
# include "engine.h"
# include "util.h"
2018-12-21 10:10:51 -05:00
namespace Engine
{
2019-06-09 00:50:26 -04:00
/** Artikash 6/7/2019
* PPSSPP JIT code has pointers , but they are all added to an offset before being used .
Find that offset and report it to user so they can search for hooks properly .
To find the offset , find a page of mapped memory with size 0x1f00000 , read and write permissions , take its address and subtract 0x8000000 .
The above is useful for emulating PSP hardware , so unlikely to change between versions .
*/
bool FindPPSSPP ( )
{
bool found = false ;
SYSTEM_INFO systemInfo ;
GetNativeSystemInfo ( & systemInfo ) ;
for ( BYTE * probe = NULL ; probe < systemInfo . lpMaximumApplicationAddress ; )
{
MEMORY_BASIC_INFORMATION info ;
if ( ! VirtualQuery ( probe , & info , sizeof ( info ) ) )
{
probe + = systemInfo . dwPageSize ;
}
else
{
if ( info . RegionSize = = 0x1f00000 & & info . Protect = = PAGE_READWRITE & & info . Type = = MEM_MAPPED )
{
found = true ;
2019-06-09 06:19:54 -04:00
ConsoleOutput ( " Textractor: PPSSPP memory found: use pattern 79 10 41 C7 and pattern offset 0 and string offset 0x%p to search for hooks " , probe - 0x8000000 ) ;
2019-06-09 00:50:26 -04:00
}
probe + = info . RegionSize ;
}
}
return found ;
}
2019-06-06 23:53:37 -04:00
bool UnsafeDetermineEngineType ( )
2019-01-30 15:02:23 -05:00
{
2019-06-09 06:19:54 -04:00
if ( Util : : CheckFile ( L " PPSSPP*.exe " ) & & FindPPSSPP ( ) ) return true ;
2019-01-30 15:02:23 -05:00
for ( std : : wstring DXVersion : { L " d3dx9 " , L " d3dx10 " } )
if ( HMODULE module = GetModuleHandleW ( DXVersion . c_str ( ) ) ) PcHooks : : hookD3DXFunctions ( module ) ;
else for ( int i = 0 ; i < 50 ; + + i )
if ( HMODULE module = GetModuleHandleW ( ( DXVersion + L " _ " + std : : to_wstring ( i ) ) . c_str ( ) ) ) PcHooks : : hookD3DXFunctions ( module ) ;
2019-06-06 23:53:37 -04:00
PcHooks : : hookGDIFunctions ( ) ;
PcHooks : : hookGDIPlusFunctions ( ) ;
return false ;
2018-12-21 10:10:51 -05:00
}
}