first commit

This commit is contained in:
dasha 2026-01-05 23:50:53 +03:00
commit 7dd9dd689e
40 changed files with 4100 additions and 0 deletions

63
.gitattributes vendored Normal file
View file

@ -0,0 +1,63 @@
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain

51
.gitignore vendored Normal file
View file

@ -0,0 +1,51 @@
# Ignore build directories
build/
CMakeFiles/
x64/
EclipseDumper/ # Output directory
# Ignore IDE/editor files
.vs/
.vscode/
# Ignore compiled binaries and intermediate files
*.dll
*.ilk
*.pdb
*.exe
*.lib
*.obj
*.iobj
*.ipdb
*.idb
*.log
*.tlog
*.lastbuildstate
*.recipe
*.pch
*.suo
*.user
*.userosscache
# Ignore CMake generated files
cmake_install.cmake
CMakeCache.txt
Makefile
# Ignore project-specific artifacts
EclipseDumperProject.z
vcpkg.applocal.log
# Ignore debug/release build artifacts
**/Debug/
**/Release/
# Ignore IntelliSense files (VSCode)
.cpp.hint
# Ignore module interface files
*.ifc.*
OSREL5.6_dump.cs
Untitled

185
ALL_BUILD.vcxproj Normal file
View file

@ -0,0 +1,185 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="17.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>
<PropertyGroup>
<ResolveNugetPackages>false</ResolveNugetPackages>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="MinSizeRel|x64">
<Configuration>MinSizeRel</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="RelWithDebInfo|x64">
<Configuration>RelWithDebInfo</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{44F6AA8F-2D5B-34A1-81E0-8C058026CE7B}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0.26100.0</WindowsTargetPlatformVersion>
<Platform>x64</Platform>
<ProjectName>ALL_BUILD</ProjectName>
<VCProjectUpgraderObjectName>NoUpgrade</VCProjectUpgraderObjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Utility</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Utility</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'" Label="Configuration">
<ConfigurationType>Utility</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'" Label="Configuration">
<ConfigurationType>Utility</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.20506.1</_ProjectFileVersion>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Midl>
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
<HeaderFileName>%(Filename).h</HeaderFileName>
<TypeLibraryName>%(Filename).tlb</TypeLibraryName>
<InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
</Midl>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Midl>
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
<HeaderFileName>%(Filename).h</HeaderFileName>
<TypeLibraryName>%(Filename).tlb</TypeLibraryName>
<InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
</Midl>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">
<Midl>
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
<HeaderFileName>%(Filename).h</HeaderFileName>
<TypeLibraryName>%(Filename).tlb</TypeLibraryName>
<InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
</Midl>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">
<Midl>
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
<HeaderFileName>%(Filename).h</HeaderFileName>
<TypeLibraryName>%(Filename).tlb</TypeLibraryName>
<InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
</Midl>
</ItemDefinitionGroup>
<ItemGroup>
<CustomBuild Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeLists.txt">
<UseUtf8Encoding>Always</UseUtf8Encoding>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Building Custom Rule C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/CMakeLists.txt</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">setlocal
C:\Users\Admin\scoop\apps\cmake\current\bin\cmake.exe "-SC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" "-BC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" --check-stamp-file "C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/CMakeFiles/generate.stamp"
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal &amp; call :cmErrorLevel %errorlevel% &amp; goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeCXXCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeRCCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCXXInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCommonLanguageInclude.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeGenericSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeInitializeConfigs.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeLanguageInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeRCInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInitialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\CMakeCommonCompilerMacros.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCXXLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCommonLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-Initialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\WindowsPaths.cmake;%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\generate.stamp</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkObjects>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Building Custom Rule C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/CMakeLists.txt</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">setlocal
C:\Users\Admin\scoop\apps\cmake\current\bin\cmake.exe "-SC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" "-BC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" --check-stamp-file "C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/CMakeFiles/generate.stamp"
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal &amp; call :cmErrorLevel %errorlevel% &amp; goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeCXXCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeRCCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCXXInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCommonLanguageInclude.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeGenericSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeInitializeConfigs.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeLanguageInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeRCInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInitialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\CMakeCommonCompilerMacros.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCXXLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCommonLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-Initialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\WindowsPaths.cmake;%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\generate.stamp</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkObjects>
<Message Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">Building Custom Rule C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/CMakeLists.txt</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">setlocal
C:\Users\Admin\scoop\apps\cmake\current\bin\cmake.exe "-SC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" "-BC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" --check-stamp-file "C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/CMakeFiles/generate.stamp"
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal &amp; call :cmErrorLevel %errorlevel% &amp; goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeCXXCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeRCCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCXXInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCommonLanguageInclude.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeGenericSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeInitializeConfigs.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeLanguageInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeRCInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInitialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\CMakeCommonCompilerMacros.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCXXLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCommonLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-Initialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\WindowsPaths.cmake;%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\generate.stamp</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">false</LinkObjects>
<Message Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">Building Custom Rule C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/CMakeLists.txt</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">setlocal
C:\Users\Admin\scoop\apps\cmake\current\bin\cmake.exe "-SC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" "-BC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" --check-stamp-file "C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/CMakeFiles/generate.stamp"
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal &amp; call :cmErrorLevel %errorlevel% &amp; goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeCXXCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeRCCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCXXInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCommonLanguageInclude.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeGenericSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeInitializeConfigs.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeLanguageInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeRCInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInitialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\CMakeCommonCompilerMacros.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCXXLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCommonLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-Initialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\WindowsPaths.cmake;%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\generate.stamp</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">false</LinkObjects>
</CustomBuild>
</ItemGroup>
<ItemGroup>
</ItemGroup>
<ItemGroup />
<ItemGroup>
<ProjectReference Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ZERO_CHECK.vcxproj">
<Project>{E350C7EB-35F8-33BC-984B-A741D3851522}</Project>
<Name>ZERO_CHECK</Name>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</ProjectReference>
<ProjectReference Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\EclipseDumper.vcxproj">
<Project>{ADBAC2CA-8FD8-3BD9-9753-B694C411D6A9}</Project>
<Name>EclipseDumper</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="17.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<CustomBuild Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeLists.txt" />
</ItemGroup>
<ItemGroup>
</ItemGroup>
</Project>

49
CMakeLists.txt Normal file
View file

@ -0,0 +1,49 @@
cmake_minimum_required(VERSION 3.22)
project(EclipseDumper LANGUAGES CXX)
# Estándar C++ 20 según configuración VS
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
add_library(EclipseDumper SHARED
Core/il2cpp/Api/Il2CppApi.cpp
Core/il2cpp/Metadata/Il2CppMetadata.cpp
Core/il2cpp/Helper/Il2CppHelper.cpp
EntryPoint/dllmain.cpp
ProtoGen/ProtoMetadata.cpp
ProtoGen/ProtoCache.cpp
ProtoGen/ProtoOutput.cpp
ProtoGen/ProtoUtil.cpp
Resources/pch.cpp
Utils/ScriptJson.cpp
Utils/ProgressReporter.cpp
)
target_include_directories(EclipseDumper PRIVATE
${PROJECT_SOURCE_DIR}/Core/il2cpp/Api
${PROJECT_SOURCE_DIR}/Core/il2cpp/Metadata
${PROJECT_SOURCE_DIR}/Core/il2cpp/Helper
${PROJECT_SOURCE_DIR}/Core/il2cpp/Offsets
${PROJECT_SOURCE_DIR}/ProtoGen
${PROJECT_SOURCE_DIR}/Il2cpp-Data
${PROJECT_SOURCE_DIR}/Resources
${PROJECT_SOURCE_DIR}/Utils
)
target_compile_definitions(EclipseDumper PRIVATE
ECLIPSEDUMPER_EXPORTS
_WINDOWS
_USRDLL
)
set_target_properties(EclipseDumper PROPERTIES
VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/Injector"
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/Injector"
)
if(MSVC)
target_compile_options(EclipseDumper PRIVATE /permissive- /sdl)
endif()

27
CMakePresets.json Normal file
View file

@ -0,0 +1,27 @@
{
"version": 3,
"configurePresets": [
{
"name": "mingw-debug",
"displayName": "MinGW Makefiles Debug",
"generator": "MinGW Makefiles",
"binaryDir": "${sourceDir}/build/mingw-debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_C_COMPILER": "C:/msys64/mingw64/bin/gcc.exe",
"CMAKE_CXX_COMPILER": "C:/msys64/mingw64/bin/g++.exe"
}
},
{
"name": "mingw-release",
"displayName": "MinGW Makefiles Release",
"generator": "MinGW Makefiles",
"binaryDir": "${sourceDir}/build/mingw-release",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_C_COMPILER": "C:/msys64/mingw64/bin/gcc.exe",
"CMAKE_CXX_COMPILER": "C:/msys64/mingw64/bin/g++.exe"
}
}
]
}

View file

@ -0,0 +1,436 @@
#include "pch.h"
#include "Il2CppOffsets.h"
#include "Il2CppApi.h"
#include <libloaderapi.h>
#include <cstdio>
#include <cstdint>
#include <cstddef>
// Type and reflection API implementations
char* Il2CppApi::TypeGetName(const Il2CppType* type) {
auto func = RemoteFuncCall<char*, const Il2CppType*>(
il2CppOffsets::Class::il2cpp_type_get_name
);
return func(type);
}
// Type system API implementations
Il2CppClass* Il2CppApi::GetTypeInfoFromTypeDefinitionIndex(TypeDefinitionIndex index) {
auto func = RemoteFuncCall<Il2CppClass*, TypeDefinitionIndex>(
il2CppOffsets::GetTypeInfoFromTypeDefinitionIndex
);
return func(index);
}
const char* Il2CppApi::ClassGetNamespace(Il2CppClass* klass) {
auto func = RemoteFuncCall<const char*, Il2CppClass*>(
il2CppOffsets::Class::il2cpp_class_get_namespace
);
return func(klass);
}
const char* Il2CppApi::ClassGetName(Il2CppClass* klass) {
auto func = RemoteFuncCall<const char*, Il2CppClass*>(
il2CppOffsets::Class::il2cpp_class_get_name
);
return func(klass);
}
bool Il2CppApi::ClassIsEnum(const Il2CppClass* klass) {
auto func = RemoteFuncCall<bool, const Il2CppClass*>(
il2CppOffsets::Class::il2cpp_class_is_enum
);
auto result = func(klass) != 0;
return result;
}
bool Il2CppApi::ClassIsValueType(const Il2CppClass* klass) {
auto func = RemoteFuncCall<bool, const Il2CppClass*>(
il2CppOffsets::Type::class_is_valuetype
);
return func(klass);
}
int Il2CppApi::ClassGetFlags(const Il2CppClass* klass) {
auto func = RemoteFuncCall<bool, const Il2CppClass*>(
il2CppOffsets::Class::il2cpp_class_get_flags
);
return func(klass);
}
Il2CppClass* Il2CppApi::ClassGetParent(Il2CppClass* klass) {
auto func = RemoteFuncCall<Il2CppClass*, Il2CppClass*>(
il2CppOffsets::Class::il2cpp_class_get_parent
);
return func(klass);
}
const Il2CppType* Il2CppApi::ClassGetType(Il2CppClass* klass) {
auto func = RemoteFuncCall<const Il2CppType*, Il2CppClass*>(
il2CppOffsets::Class::il2cpp_class_get_type
);
return func(klass);
}
Il2CppClass* Il2CppApi::ClassFromName(const Il2CppImage* image, const char* namespaze, const char* name) {
auto func = RemoteFuncCall<Il2CppClass*, const Il2CppImage*, const char*, const char*>(
il2CppOffsets::Class::il2cpp_class_from_name
);
return func(image, namespaze, name);
}
bool Il2CppApi::ClassInit(Il2CppClass* klass) {
auto func = RemoteFuncCall<bool, Il2CppClass*>(
il2CppOffsets::RuntimeStuff::il2cpp_vm_class_init
);
return func(klass);
}
// Method API implementations
const uint8_t* Il2CppApi::ClassGetMethods(Il2CppClass* klass, void* iter) {
auto func = RemoteFuncCall<const uint8_t*, Il2CppClass*, void*>(
il2CppOffsets::Class::il2cpp_class_get_methods
);
return func(klass, iter);
}
const char* Il2CppApi::MethodGetName(const uint8_t* MethodPtr) {
auto func = RemoteFuncCall<const char*, const uint8_t*>(
il2CppOffsets::Methods::il2cpp_method_get_name
);
return func(MethodPtr);
}
const Il2CppType* Il2CppApi::MethodGetReturnType(const uint8_t* method) {
auto func = RemoteFuncCall<const Il2CppType*, const uint8_t*>(
il2CppOffsets::Methods::il2cpp_method_get_return_type
);
return func(method);
}
const uint32_t Il2CppApi::MethodGetParamCount(const uint8_t* method) {
auto func = RemoteFuncCall<const uint32_t, const uint8_t*>(
il2CppOffsets::Methods::il2cpp_method_get_param_count
);
return func(method);
}
const Il2CppType* Il2CppApi::MethodGetParam(const uint8_t* method, uint32_t index) {
auto func = RemoteFuncCall<const Il2CppType*, const uint8_t*, uint32_t>(
il2CppOffsets::Methods::il2cpp_method_get_param
);
return func(method, index);
}
const char* Il2CppApi::MethodGetParamName(const uint8_t* method, uint32_t index) {
auto func = RemoteFuncCall<const char*, const uint8_t*, uint32_t>(
il2CppOffsets::Methods::il2cpp_method_get_param_name
);
return func(method, index);
}
const uintptr_t* Il2CppApi::ClassGetMethodFromName(Il2CppClass* klass, const char* name, int argsCount) {
auto func = RemoteFuncCall<uintptr_t*, Il2CppClass*, const char*, int>(
il2CppOffsets::Class::il2cpp_class_get_method_from_name
);
ClassInit(klass);
return func(klass, name, argsCount);
}
std::string Il2CppApi::GetMethodModifier(uint32_t flags) {
std::stringstream Modifiers;
auto access = flags & METHOD_ATTRIBUTE_MEMBER_ACCESS_MASK;
switch (access) {
case METHOD_ATTRIBUTE_PRIVATE: Modifiers << "private "; break;
case METHOD_ATTRIBUTE_PUBLIC: Modifiers << "public "; break;
case METHOD_ATTRIBUTE_FAMILY: Modifiers << "protected "; break;
case METHOD_ATTRIBUTE_ASSEM:
case METHOD_ATTRIBUTE_FAM_AND_ASSEM: Modifiers << "internal "; break;
case METHOD_ATTRIBUTE_FAM_OR_ASSEM: Modifiers << "protected internal "; break;
}
if (flags & METHOD_ATTRIBUTE_STATIC) Modifiers << "static ";
if (flags & METHOD_ATTRIBUTE_ABSTRACT) {
Modifiers << "abstract ";
if ((flags & METHOD_ATTRIBUTE_VTABLE_LAYOUT_MASK) == METHOD_ATTRIBUTE_REUSE_SLOT) {
Modifiers << "override ";
}
}
else if (flags & METHOD_ATTRIBUTE_FINAL) {
if ((flags & METHOD_ATTRIBUTE_VTABLE_LAYOUT_MASK) == METHOD_ATTRIBUTE_REUSE_SLOT) {
Modifiers << "sealed override ";
}
}
else if (flags & METHOD_ATTRIBUTE_VIRTUAL) {
if ((flags & METHOD_ATTRIBUTE_VTABLE_LAYOUT_MASK) == METHOD_ATTRIBUTE_NEW_SLOT) {
Modifiers << "virtual ";
}
else {
Modifiers << "override ";
}
}
if (flags & METHOD_ATTRIBUTE_PINVOKE_IMPL) Modifiers << "extern ";
return Modifiers.str();
}
// Field API implementations
uintptr_t* Il2CppApi::ClassGetFields(Il2CppClass* klass, void** iter) {
auto func = RemoteFuncCall<uintptr_t*, Il2CppClass*, void**>(
il2CppOffsets::Class::il2cpp_class_get_fields
);
ClassInit(klass);
return func(klass, iter);
}
int Il2CppApi::FieldGetFlags(uintptr_t* field) {
auto func = RemoteFuncCall<int, uintptr_t*>(
il2CppOffsets::Field::il2cpp_field_get_flags
);
return func(field);
}
const Il2CppType* Il2CppApi::FieldGetType(uintptr_t* field) {
auto func = RemoteFuncCall<const Il2CppType*, uintptr_t*>(
il2CppOffsets::Field::il2cpp_field_get_type
);
return func(field);
}
const char* Il2CppApi::FieldGetName(uintptr_t* field) {
auto func = RemoteFuncCall<const char*, uintptr_t*>(
il2CppOffsets::Field::il2cpp_field_get_name
);
return func(field);
}
void Il2CppApi::FieldStaticGetValue(uintptr_t* field, void* value) {
auto func = RemoteFuncCall<void, uintptr_t*, void*>(
il2CppOffsets::Field::il2cpp_field_static_get_value
);
func(field, value);
}
size_t Il2CppApi::FieldStaticGetValue(uintptr_t* field) {
size_t out = 0;
FieldStaticGetValue(
field,
&out
);
return out;
}
bool Il2CppApi::FieldIsInstance(uintptr_t* field) {
int flags = Il2CppApi::FieldGetFlags(field);
return (flags & FIELD_ATTRIBUTE_STATIC) == 0;
}
size_t Il2CppApi::FieldGetOffset(uintptr_t* field) {
auto func = RemoteFuncCall<size_t, uintptr_t*>(
il2CppOffsets::Field::il2cpp_field_get_offset
);
return func(field);
}
uint32_t Il2CppApi::FieldGetToken(uintptr_t* field) {
auto func = RemoteFuncCall<uint32_t, uintptr_t*>(
il2CppOffsets::Field::il2cpp_field_get_token
);
return func(field);
}
// Generic type API implementations
const size_t* Il2CppApi::ClassGetInterfaces(const uint8_t* klass, size_t& count) {
const uint64_t count_ptr = *reinterpret_cast<const uint64_t*>(klass + 24);
count = static_cast<size_t>(*reinterpret_cast<const uint8_t*>(count_ptr + 67LL)) ^ 0x9BLL;
const size_t* interfaces = *reinterpret_cast<const size_t* const*>(klass + 16);
return interfaces ? interfaces : nullptr;
}
const Il2CppGenericContainer* Il2CppApi::GenericClassGetGenericContainer(const Il2CppGenericClass* generic_class) {
if (!generic_class) return nullptr;
return generic_class->genericContainer;
}
const Il2CppGenericClass* Il2CppApi::ClassGetGenericClass(const Il2CppClass* klass) {
if (!klass) return nullptr;
return klass->generic_class;
}
uint32_t Il2CppApi::ClassGetGenericArgCount(const Il2CppClass* klass) {
auto generic_class = ClassGetGenericClass(klass);
if (!generic_class) return 0;
auto generic_container = GenericClassGetGenericContainer(generic_class);
if (!generic_container) return 0;
return generic_container->type_argc;
}
const void* Il2CppApi::ClassGetGenericArgType(const Il2CppClass* klass, uint64_t index) {
if (!klass) return nullptr;
const Il2CppGenericClass* generic_class = klass->generic_class;
if (!generic_class) return nullptr;
const Il2CppGenericContainer* generic_container = generic_class->genericContainer;
if (!generic_container) return nullptr;
const void** argv = generic_container->type_argv;
if (!argv) return nullptr;
return argv[index];
}
bool Il2CppApi::ClassIsGeneric(const Il2CppClass* klass) {
if (!klass) return false;
const Il2CppGenericClass* generic_class = klass->generic_class;
if (!generic_class) return false;
return generic_class->genericContainer != nullptr;
}
Il2CppClass* Il2CppApi::FromIl2CppType(const Il2CppType* type) {
auto func = RemoteFuncCall<Il2CppClass*, const Il2CppType*>(
il2CppOffsets::Class::FromIl2CppType
);
return func(type);
}
// Runtime API implementations
const uintptr_t* Il2CppApi::RuntimeClassInit() {
auto func = RemoteFuncCall<const uintptr_t*>(
il2CppOffsets::RuntimeStuff::il2cpp_runtime_class_init
);
return func();
}
Il2CppObject* Il2CppApi::MethodInvoke(const uintptr_t* method, void* obj, void** params) { //under the hood this is il2cpp_runtime_invoke
Il2CppException* exception = nullptr;
auto func = RemoteFuncCall<Il2CppObject*, const uintptr_t*, void*, void**, Il2CppException**>(
il2CppOffsets::RuntimeStuff::il2cpp_runtime_invoke
);
return func(method, obj, params, &exception);
}
Il2CppDomain* Il2CppApi::DomainGet() {
auto func = RemoteFuncCall<Il2CppDomain*>(
il2CppOffsets::Domain::il2cpp_domain_get
);
return func();
}
Il2CppAssembly** Il2CppApi::DomainGetAssemblies(size_t* size) {
uintptr_t assemblies_array = il2CppOffsets::gIBaseAddress + 0x43B5138;
uintptr_t* asm_start_ptr = *reinterpret_cast<uintptr_t**>(assemblies_array);
uintptr_t* asm_end_ptr = *reinterpret_cast<uintptr_t**>(assemblies_array + sizeof(uintptr_t));
*size = (reinterpret_cast<uintptr_t>(asm_end_ptr) - reinterpret_cast<uintptr_t>(asm_start_ptr)) / sizeof(uintptr_t);
return reinterpret_cast<Il2CppAssembly**>(asm_start_ptr);
}
const Il2CppAssembly* Il2CppApi::DomainAssemblyOpen(const char* name)
{
// RCX = Il2CppDomain*, RDX = const char*
auto func = RemoteFuncCall<const Il2CppAssembly*,
Il2CppDomain*,
const char*>(
il2CppOffsets::Domain::il2cpp_domain_assembly_open
);
Il2CppDomain* domain = DomainGet();
return func(domain, name);
}
const Il2CppImage* Il2CppApi::AssemblyGetImage(const Il2CppAssembly* assembly) {
auto func = RemoteFuncCall<const Il2CppImage*, const Il2CppAssembly*>(
il2CppOffsets::Domain::il2cpp_assembly_get_image
);
return func(assembly);
}
Il2CppClass* Il2CppApi::ObjectGetClass(Il2CppObject* obj)
{
return obj->klass;
}
const void* Il2CppApi::ObjectUnbox(Il2CppObject* obj) {
return reinterpret_cast<void*>(reinterpret_cast<uint8_t*>(obj) + sizeof(Il2CppObject));
}
Il2CppArray* Il2CppApi::ArrayNew(Il2CppClass* elementTypeInfo, il2cpp_array_size_t length) {
auto func = RemoteFuncCall<Il2CppArray*, Il2CppClass*, il2cpp_array_size_t>(
il2CppOffsets::RuntimeStuff::il2cpp_vm_array_new
);
return func(elementTypeInfo, length);
}
Il2CppObject* Il2CppApi::ObjectNew(Il2CppClass* klass) {
auto func = RemoteFuncCall<Il2CppObject*, Il2CppClass*>(
il2CppOffsets::RuntimeStuff::il2cpp_object_new
);
ClassInit(klass);
return func(klass);
}
void Il2CppApi::GCDisable() {
auto func = RemoteFuncCall<void>(
il2CppOffsets::GC::il2cpp_gc_disable
);
return func();
}
Il2CppThread* Il2CppApi::ThreadAttach(Il2CppDomain* domain) {
auto func = RemoteFuncCall<Il2CppThread*, Il2CppDomain*>(
il2CppOffsets::RuntimeStuff::il2cpp_thread_attach
);
return func(domain);
}
const char* Il2CppApi::AssemblyGetName(const Il2CppAssembly* assembly) {
auto baseAddress = reinterpret_cast<const uint8_t*>(assembly);
uint64_t* encryptedPtr = reinterpret_cast<uint64_t*>(const_cast<uint8_t*>(baseAddress) + 0x18LL);
uint64_t ptrObfuscated = *encryptedPtr;
uint64_t realPtr = ptrObfuscated - 0x6E24B24F7558EC86LL;
return reinterpret_cast<const char*>(realPtr);
}
uint32_t Il2CppApi::ImageGetClassCount(const Il2CppImage* image)
{
uint8_t* base = reinterpret_cast<uint8_t*>(const_cast<Il2CppImage*>(image));
uint32_t rawValue = *reinterpret_cast<uint32_t*>(base + 16);
uint32_t value = rawValue ^ 0x183E6E00u;
return value;
}
Il2CppClass* Il2CppApi::ImageGetClass(const Il2CppImage* image, size_t index) {
uint8_t* base = reinterpret_cast<uint8_t*>(const_cast<Il2CppImage*>(image));
uint32_t rawValue = *reinterpret_cast<uint32_t*>(base + 48);
int value = rawValue - 1579693933;
return Il2CppApi::GetTypeInfoFromTypeDefinitionIndex(value + index);
}

View file

@ -0,0 +1,83 @@
#pragma once
#include <cstdint>
#include <functional>
#include <string>
#include <map>
#include "il2cpp-class.h"
#include "Il2CppOffsets.h"
#include "il2cpp-metadata.h"
#include "il2cpp-tabledefs.h"
#include "il2cpp-api-types.h"
class Il2CppApi {
public:
// Type system API
static Il2CppClass* GetTypeInfoFromTypeDefinitionIndex(TypeDefinitionIndex index);
static const char* ClassGetNamespace(Il2CppClass* klass);
static const char* ClassGetName(Il2CppClass* klass);
static bool ClassIsEnum(const Il2CppClass* klass);
static bool ClassIsValueType(const Il2CppClass* klass);
static int ClassGetFlags(const Il2CppClass* klass);
static Il2CppClass* ClassGetParent(Il2CppClass* klass);
static const Il2CppType* ClassGetType(Il2CppClass* klass);
static Il2CppClass* ClassFromName(const Il2CppImage* image, const char* namespaze, const char* name);
static bool ClassInit(Il2CppClass* klass);
// Method API
static const uint8_t* ClassGetMethods(Il2CppClass* klass, void* iter);
static const char* MethodGetName(const uint8_t* MethodPtr);
static const Il2CppType* MethodGetReturnType(const uint8_t* method);
static const uint32_t MethodGetParamCount(const uint8_t* method);
static const Il2CppType* MethodGetParam(const uint8_t* method, uint32_t index);
static const char* MethodGetParamName(const uint8_t* method, uint32_t index);
static const uintptr_t* ClassGetMethodFromName(Il2CppClass* klass, const char* name, int argsCount);
static std::string GetMethodModifier(uint32_t flags);
// Field API
static uintptr_t* ClassGetFields(Il2CppClass* klass, void** iter);
static int FieldGetFlags(uintptr_t* field);
static const Il2CppType* FieldGetType(uintptr_t* field);
static const char* FieldGetName(uintptr_t* field);
static void FieldStaticGetValue(uintptr_t* field, void* value);
static size_t FieldStaticGetValue(uintptr_t* field);
static bool FieldIsInstance(uintptr_t* field);
static size_t FieldGetOffset(uintptr_t* field);
static uint32_t FieldGetToken(uintptr_t* field);
// Generic type API
static const void* ObjectUnbox(Il2CppObject* obj);
static const size_t* ClassGetInterfaces(const uint8_t* klass, size_t& count);
static const Il2CppGenericContainer* GenericClassGetGenericContainer(const Il2CppGenericClass* generic_class);
static const Il2CppGenericClass* ClassGetGenericClass(const Il2CppClass* klass);
static uint32_t ClassGetGenericArgCount(const Il2CppClass* klass);
static const void* ClassGetGenericArgType(const Il2CppClass* klass, uint64_t index);
static bool ClassIsGeneric(const Il2CppClass* klass);
// Type and reflection API
static char* TypeGetName(const Il2CppType* type);
static Il2CppClass* FromIl2CppType(const Il2CppType* type);
// Runtime API
static const uintptr_t* RuntimeClassInit();
static Il2CppDomain* DomainGet();
static Il2CppObject* MethodInvoke(const uintptr_t* method, void* obj, void** params);
static Il2CppAssembly** DomainGetAssemblies(size_t* size);
static const Il2CppAssembly* DomainAssemblyOpen(const char* name);
static const Il2CppImage* AssemblyGetImage(const Il2CppAssembly* assembly);
static const char* AssemblyGetName(const Il2CppAssembly* assembly);
static Il2CppClass* ObjectGetClass(Il2CppObject* obj);
static uint32_t ImageGetClassCount(const Il2CppImage* image);
static Il2CppThread* ThreadAttach(Il2CppDomain* domain);
static Il2CppArray* ArrayNew(Il2CppClass* elementTypeInfo, il2cpp_array_size_t length);
static Il2CppObject* ObjectNew(Il2CppClass* klass);
static void GCDisable();
static Il2CppClass* ImageGetClass(const Il2CppImage* image, size_t index);
private:
template <typename ReturnType, typename... Args>
static auto RemoteFuncCall(uintptr_t offset) {
using FuncType = ReturnType(*)(Args...);
return reinterpret_cast<FuncType>(offset + il2CppOffsets::gIBaseAddress);
}
};

View file

@ -0,0 +1,53 @@
#include "pch.h"
#include "Il2CppHelper.h"
const uint8_t* Il2CppHelper::FindMethodInHierarchy(Il2CppClass* klass, const std::string &methodName, const std::vector<std::string> paramCount) {
const uint8_t* method = nullptr;
while (klass != nullptr) {
method = FindMethod(klass, methodName, paramCount);
if(method) break;
klass = Il2CppApi::ClassGetParent(klass);
}
return method;
}
const uint8_t* Il2CppHelper::FindMethod(Il2CppClass* klass, const std::string &name, const std::vector<std::string> &arg_types)
{
Il2CppApi::ClassInit(klass);
void* iter = nullptr;
while (auto method = Il2CppApi::ClassGetMethods(klass, &iter)) {
auto methodName = Il2CppApi::MethodGetName(method);
if (methodName == name) {
auto paramCount = Il2CppApi::MethodGetParamCount(method);
if (paramCount == arg_types.size()) {
bool fail = false;
for (size_t i = 0; i < paramCount; ++i) {
auto typeName = Il2CppApi::TypeGetName(Il2CppApi::MethodGetParam(method, i));
if (arg_types[i] != typeName) {
fail = true;
break;
}
}
if (!fail) {
return method;
}
}
}
}
return nullptr;
}
uintptr_t* Il2CppHelper::GetFieldDataPtr(uintptr_t* field, Il2CppObject* object) {
size_t offset = Il2CppApi::FieldGetOffset(field);
uintptr_t* base_ptr = reinterpret_cast<uintptr_t*>(object);
return base_ptr + offset;
}

View file

@ -0,0 +1,9 @@
#pragma once
#include "Il2CppApi.h"
class Il2CppHelper {
public:
static const uint8_t* FindMethodInHierarchy(Il2CppClass* klass, const std::string &methodName, const std::vector<std::string> paramCount);
static const uint8_t* FindMethod(Il2CppClass* klass, const std::string &name, const std::vector<std::string> &arg_types);
static uintptr_t* GetFieldDataPtr(uintptr_t* field, Il2CppObject* object);
};

View file

@ -0,0 +1,253 @@
#include "pch.h"
#include "Il2CppMetadata.h"
enum class Il2CppType_Flag {
is_param,
is_return,
is_field,
is_class,
};
std::string Il2CppType_Helper(const Il2CppType* type_ptr, Il2CppType_Flag flag) {
std::string ret;
const uint8_t type_flag = (reinterpret_cast<const uint8_t*>(type_ptr))[11];
if (flag == Il2CppType_Flag::is_return
|| flag == Il2CppType_Flag::is_field) {
if (type_flag & IL2CPP_TYPE_BYREF) {
ret += "ref ";
}
}
if (flag == Il2CppType_Flag::is_param) {
if (type_flag & IL2CPP_TYPE_BYREF) {
if (type_ptr->attrs & PARAM_ATTRIBUTE_OUT && !(type_ptr->attrs & PARAM_ATTRIBUTE_IN)) {
ret += "out ";
}
else if (type_ptr->attrs & PARAM_ATTRIBUTE_IN && !(type_ptr->attrs & PARAM_ATTRIBUTE_OUT)) {
ret += "in ";
}
else {
ret += "ref ";
}
}
else {
if (type_ptr->attrs & PARAM_ATTRIBUTE_IN) {
ret += "[In] ";
}
if (type_ptr->attrs & PARAM_ATTRIBUTE_OUT) {
ret += "[Out] ";
}
}
}
ret += Il2CppApi::TypeGetName(type_ptr);
return ret;
}
std::string Il2CppMetadata::DumpClass(Il2CppClass* klass) {
uint8_t* byte_klass = reinterpret_cast<uint8_t*>(klass);
std::stringstream outPut;
/*Il2CppApi::ClassInit(klass); */
auto QualName = Il2CppApi::TypeGetName(Il2CppApi::ClassGetType(klass));
auto flags = Il2CppApi::ClassGetFlags(klass);
if (flags & TYPE_ATTRIBUTE_SERIALIZABLE) {
outPut << "[Serializable]\n";
}
//TODO attribute
bool is_valuetype = Il2CppApi::ClassIsValueType(klass);
bool is_enum = Il2CppApi::ClassIsEnum(klass);
auto visibility = flags & TYPE_ATTRIBUTE_VISIBILITY_MASK;
switch (visibility) {
case TYPE_ATTRIBUTE_PUBLIC:
case TYPE_ATTRIBUTE_NESTED_PUBLIC:
outPut << "public ";
break;
case TYPE_ATTRIBUTE_NOT_PUBLIC:
case TYPE_ATTRIBUTE_NESTED_FAM_AND_ASSEM:
case TYPE_ATTRIBUTE_NESTED_ASSEMBLY:
outPut << "internal ";
break;
case TYPE_ATTRIBUTE_NESTED_PRIVATE:
outPut << "private ";
break;
case TYPE_ATTRIBUTE_NESTED_FAMILY:
outPut << "protected ";
break;
case TYPE_ATTRIBUTE_NESTED_FAM_OR_ASSEM:
outPut << "protected internal ";
break;
}
if (flags & TYPE_ATTRIBUTE_ABSTRACT && flags & TYPE_ATTRIBUTE_SEALED) {
outPut << "static ";
}
else if (!(flags & TYPE_ATTRIBUTE_INTERFACE) && flags & TYPE_ATTRIBUTE_ABSTRACT) {
outPut << "abstract ";
}
else if (!is_valuetype && !is_enum && flags & TYPE_ATTRIBUTE_SEALED) {
outPut << "sealed ";
}
if (flags & TYPE_ATTRIBUTE_INTERFACE) {
outPut << "interface ";
}
else if (is_enum) {
outPut << "enum ";
}
else if (is_valuetype) {
outPut << "struct ";
}
else {
outPut << "class ";
}
outPut << QualName;
std::vector<std::string> extends;
auto parent = Il2CppApi::ClassGetParent(klass);
if (!is_valuetype && !is_enum && parent) {
auto parent_type = Il2CppApi::ClassGetType(parent);
if (parent_type->type != IL2CPP_TYPE_OBJECT) {
extends.emplace_back(Il2CppApi::ClassGetName(parent));
}
}
{
size_t count = 0;
auto interfaces = Il2CppApi::ClassGetInterfaces(byte_klass, count);
for (size_t i = 0; i < count; ++i) {
Il2CppClass* itf = reinterpret_cast<Il2CppClass*>(interfaces[i]);
if (itf) {
const Il2CppType* ifaceType = Il2CppApi::ClassGetType(itf);
const char* fullName = Il2CppApi::TypeGetName(ifaceType);
extends.emplace_back(fullName);
}
}
}
if (!extends.empty()) {
outPut << " : " << extends[0];
for (int i = 1; i < extends.size(); ++i) {
outPut << ", " << extends[i];
}
}
outPut << "\n{";
outPut << Il2CppMetadata::DumpClassFields(klass);
outPut << Il2CppMetadata::DumpClassMethods(klass);
outPut << "}\n";
return outPut.str();
}
std::string Il2CppMetadata::DumpClassMethods(Il2CppClass* klass) {
std::stringstream outPut;
outPut << "\n\t// Methods\n";
void* iter = nullptr;
while (const uint8_t* method = Il2CppApi::ClassGetMethods(klass, &iter)) {
//TODO attribute
int64_t VA = *(reinterpret_cast<const uint64_t*>(method + il2CppOffsets::Methods::method_pointer));
int64_t RVA = VA - il2CppOffsets::gIBaseAddress;
if (method) {
outPut << "\t// RVA: 0x"
<< std::hex << RVA
<< " VA: 0x"
<< std::hex << VA;
}
else {
outPut << "\t// RVA: 0x VA: 0x0";
}
outPut << "\n\t";
const uint32_t flags = *reinterpret_cast<const uint32_t*>(method + il2CppOffsets::Methods::il2cpp_method_get_flags);
outPut << Il2CppApi::GetMethodModifier(flags);
//TODO genericContainerIndex
const Il2CppType* return_type = Il2CppApi::MethodGetReturnType(method);
outPut << Il2CppType_Helper(return_type, Il2CppType_Flag::is_return) << " "
<< Il2CppApi::MethodGetName(method) << "(";
const uint32_t param_count = Il2CppApi::MethodGetParamCount(method);
for (uint32_t i = 0; i < param_count; ++i) {
const Il2CppType* param_type = Il2CppApi::MethodGetParam(method, i);
outPut << Il2CppType_Helper(param_type, Il2CppType_Flag::is_param) << " "
<< Il2CppApi::MethodGetParamName(method, i);
outPut << ", ";
}
if (param_count != 0) {
outPut.seekp(-2, std::ios_base::cur);
}
outPut << ") { }\n";
//TODO GenericInstMethod
}
return outPut.str();
}
std::string Il2CppMetadata::DumpClassFields(Il2CppClass* klass) {
std::stringstream outPut;
outPut << "\n\t// Fields\n";
auto is_enum = Il2CppApi::ClassIsEnum(klass);
void* iter = nullptr;
while (auto field = Il2CppApi::ClassGetFields(klass, &iter)) {
//TODO attribute
outPut << "\t";
auto attrs = Il2CppApi::FieldGetFlags(field);
auto access = attrs & FIELD_ATTRIBUTE_FIELD_ACCESS_MASK;
switch (access) {
case FIELD_ATTRIBUTE_PRIVATE:
outPut << "private ";
break;
case FIELD_ATTRIBUTE_PUBLIC:
outPut << "public ";
break;
case FIELD_ATTRIBUTE_FAMILY:
outPut << "protected ";
break;
case FIELD_ATTRIBUTE_ASSEMBLY:
case FIELD_ATTRIBUTE_FAM_AND_ASSEM:
outPut << "internal ";
break;
case FIELD_ATTRIBUTE_FAM_OR_ASSEM:
outPut << "protected internal ";
break;
}
if (attrs & FIELD_ATTRIBUTE_LITERAL) {
outPut << "const ";
}
else {
if (attrs & FIELD_ATTRIBUTE_STATIC) {
outPut << "static ";
}
if (attrs & FIELD_ATTRIBUTE_INIT_ONLY) {
outPut << "readonly ";
}
}
const Il2CppType* field_type = Il2CppApi::FieldGetType(field);
outPut << Il2CppType_Helper(field_type, Il2CppType_Flag::is_field) <<
" " << Il2CppApi::FieldGetName(field);
if (attrs & FIELD_ATTRIBUTE_LITERAL && is_enum) {
uint64_t val = 0;
Il2CppApi::FieldStaticGetValue(field, &val);
outPut << " = " << std::dec << val;
}
outPut << "; // 0x" << std::hex << Il2CppApi::FieldGetOffset(field) << "\n";
}
return outPut.str();
}

View file

@ -0,0 +1,9 @@
#pragma once
#include "Il2CppApi.h"
class Il2CppMetadata {
public:
static std::string DumpClass(Il2CppClass* klass);
static std::string DumpClassMethods(Il2CppClass* klass);
static std::string DumpClassFields(Il2CppClass* klass);
};

View file

@ -0,0 +1,66 @@
#pragma once
#include "pch.h"
//APIs Offsets Should Be Changed Every Update!
namespace il2CppOffsets {
const uintptr_t gIBaseAddress = reinterpret_cast<const uintptr_t>(GetModuleHandleA("GenshinImpact.exe"));
constexpr int GetTypeInfoFromTypeDefinitionIndex = 0x5391B0;
//easily gotten by searching this string " because generic types cannot have explicit layout."
namespace Class {
constexpr int il2cpp_type_get_name = 0x4C2710;
constexpr int il2cpp_class_get_namespace = 0x4C1900;
//string: " %s%s%s must be instantiated using the ScriptableObject.CreateInstance method instead of new %s."
constexpr int il2cpp_class_get_name = 0x4C18F0;
//string: " %s%s%s must be instantiated using the ScriptableObject.CreateInstance method instead of new %s."
constexpr int il2cpp_class_get_methods = 0x4C18B0;
constexpr int FromIl2CppType = 0x5299B0;
constexpr int il2cpp_class_from_name = 0x4C1800;
constexpr int il2cpp_class_get_method_from_name = 0x4C18D0;
constexpr int il2cpp_class_get_fields = 0x4C1810;
constexpr int il2cpp_class_get_flags = 0x4C19A0;
constexpr int il2cpp_class_get_type = 0x4C1A00;
constexpr int il2cpp_class_get_parent = 0x4C1940;
constexpr int il2cpp_class_is_enum = 0x4C1AD0;
}
namespace Methods {
const int il2cpp_method_get_name = 0x4C2150;
const int il2cpp_method_get_return_type = 0x4C2130;
const int il2cpp_method_get_param_count = 0x4C21A0;
const int il2cpp_method_get_param = 0x4C21B0;
const int il2cpp_method_get_param_name = 0x4C22B0;
constexpr int method_pointer = 0x8;
constexpr int il2cpp_method_get_flags = 0x2A;
}
namespace GC {
constexpr int il2cpp_gc_disable = 0x4C1EA0;
}
namespace Domain {
constexpr int il2cpp_domain_get = 0x4C1B30;
constexpr int il2cpp_domain_get_assemblies = 0x0;
constexpr int il2cpp_domain_assembly_open = 0x4C1BC0;
constexpr int il2cpp_assembly_get_image = 0x4C1770;
}
namespace Field {
constexpr int il2cpp_field_get_name = 0x4C1C50;
constexpr int il2cpp_field_get_type = 0x4C1CA0;
constexpr int il2cpp_field_get_flags = 0x4C1C60;
constexpr int il2cpp_field_get_offset = 0x4C1C90;
constexpr int il2cpp_field_get_token = 0x4C1C80;
constexpr int il2cpp_field_static_get_value = 0x4C1E30;
}
namespace RuntimeStuff {
constexpr int il2cpp_runtime_class_init = 0x4C8DF0;
constexpr int il2cpp_vm_class_init = 0x52ED90;
constexpr int il2cpp_thread_attach = 0x4C26A0;
constexpr int il2cpp_vm_array_new = 0x4C1720;
constexpr int il2cpp_object_new = 0x545A00;
constexpr int il2cpp_runtime_invoke = 0x4C23C0;
}
namespace Type {
constexpr int class_is_valuetype = 0x4C1990;
}
}

53
EclipseDumper.sln Normal file
View file

@ -0,0 +1,53 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ALL_BUILD", "ALL_BUILD.vcxproj", "{44F6AA8F-2D5B-34A1-81E0-8C058026CE7B}"
ProjectSection(ProjectDependencies) = postProject
{ADBAC2CA-8FD8-3BD9-9753-B694C411D6A9} = {ADBAC2CA-8FD8-3BD9-9753-B694C411D6A9}
{E350C7EB-35F8-33BC-984B-A741D3851522} = {E350C7EB-35F8-33BC-984B-A741D3851522}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EclipseDumper", "EclipseDumper.vcxproj", "{ADBAC2CA-8FD8-3BD9-9753-B694C411D6A9}"
ProjectSection(ProjectDependencies) = postProject
{E350C7EB-35F8-33BC-984B-A741D3851522} = {E350C7EB-35F8-33BC-984B-A741D3851522}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", "ZERO_CHECK.vcxproj", "{E350C7EB-35F8-33BC-984B-A741D3851522}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Release|x64 = Release|x64
MinSizeRel|x64 = MinSizeRel|x64
RelWithDebInfo|x64 = RelWithDebInfo|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{44F6AA8F-2D5B-34A1-81E0-8C058026CE7B}.Debug|x64.ActiveCfg = Debug|x64
{44F6AA8F-2D5B-34A1-81E0-8C058026CE7B}.Release|x64.ActiveCfg = Release|x64
{44F6AA8F-2D5B-34A1-81E0-8C058026CE7B}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
{44F6AA8F-2D5B-34A1-81E0-8C058026CE7B}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
{ADBAC2CA-8FD8-3BD9-9753-B694C411D6A9}.Debug|x64.ActiveCfg = Debug|x64
{ADBAC2CA-8FD8-3BD9-9753-B694C411D6A9}.Debug|x64.Build.0 = Debug|x64
{ADBAC2CA-8FD8-3BD9-9753-B694C411D6A9}.Release|x64.ActiveCfg = Release|x64
{ADBAC2CA-8FD8-3BD9-9753-B694C411D6A9}.Release|x64.Build.0 = Release|x64
{ADBAC2CA-8FD8-3BD9-9753-B694C411D6A9}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
{ADBAC2CA-8FD8-3BD9-9753-B694C411D6A9}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
{ADBAC2CA-8FD8-3BD9-9753-B694C411D6A9}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
{ADBAC2CA-8FD8-3BD9-9753-B694C411D6A9}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
{E350C7EB-35F8-33BC-984B-A741D3851522}.Debug|x64.ActiveCfg = Debug|x64
{E350C7EB-35F8-33BC-984B-A741D3851522}.Debug|x64.Build.0 = Debug|x64
{E350C7EB-35F8-33BC-984B-A741D3851522}.Release|x64.ActiveCfg = Release|x64
{E350C7EB-35F8-33BC-984B-A741D3851522}.Release|x64.Build.0 = Release|x64
{E350C7EB-35F8-33BC-984B-A741D3851522}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
{E350C7EB-35F8-33BC-984B-A741D3851522}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
{E350C7EB-35F8-33BC-984B-A741D3851522}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
{E350C7EB-35F8-33BC-984B-A741D3851522}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {E1D02021-84AF-34D7-B4E6-A7CA30CC92F2}
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
EndGlobal

392
EclipseDumper.vcxproj Normal file
View file

@ -0,0 +1,392 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="17.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="MinSizeRel|x64">
<Configuration>MinSizeRel</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="RelWithDebInfo|x64">
<Configuration>RelWithDebInfo</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{ADBAC2CA-8FD8-3BD9-9753-B694C411D6A9}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0.26100.0</WindowsTargetPlatformVersion>
<Platform>x64</Platform>
<ProjectName>EclipseDumper</ProjectName>
<VCProjectUpgraderObjectName>NoUpgrade</VCProjectUpgraderObjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.20506.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Injector\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EclipseDumper.dir\Debug\</IntDir>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EclipseDumper</TargetName>
<TargetExt Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.dll</TargetExt>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</GenerateManifest>
<LocalDebuggerWorkingDirectory Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main</LocalDebuggerWorkingDirectory>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Injector\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">EclipseDumper.dir\Release\</IntDir>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">EclipseDumper</TargetName>
<TargetExt Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.dll</TargetExt>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</GenerateManifest>
<LocalDebuggerWorkingDirectory Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main</LocalDebuggerWorkingDirectory>
<OutDir Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\MinSizeRel\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">EclipseDumper.dir\MinSizeRel\</IntDir>
<TargetName Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">EclipseDumper</TargetName>
<TargetExt Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">.dll</TargetExt>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">false</LinkIncremental>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">true</GenerateManifest>
<LocalDebuggerWorkingDirectory Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main</LocalDebuggerWorkingDirectory>
<OutDir Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\RelWithDebInfo\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">EclipseDumper.dir\RelWithDebInfo\</IntDir>
<TargetName Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">EclipseDumper</TargetName>
<TargetExt Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">.dll</TargetExt>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">true</LinkIncremental>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">true</GenerateManifest>
<LocalDebuggerWorkingDirectory Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main</LocalDebuggerWorkingDirectory>
</PropertyGroup>
<PropertyGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<AdditionalIncludeDirectories>C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Api;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Metadata;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Helper;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Offsets;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Il2cpp-Data;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Resources;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Utils;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<ConformanceMode>true</ConformanceMode>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<ExceptionHandling>Sync</ExceptionHandling>
<ForceConformanceInForLoopScope></ForceConformanceInForLoopScope>
<InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
<LanguageStandard>stdcpp20</LanguageStandard>
<MinimalRebuild></MinimalRebuild>
<Optimization>Disabled</Optimization>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<RemoveUnreferencedCodeData></RemoveUnreferencedCodeData>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<SDLCheck>true</SDLCheck>
<SupportJustMyCode></SupportJustMyCode>
<TreatWChar_tAsBuiltInType></TreatWChar_tAsBuiltInType>
<UseFullPaths>false</UseFullPaths>
<PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;_WINDOWS;ECLIPSEDUMPER_EXPORTS;_USRDLL;CMAKE_INTDIR="Debug";EclipseDumper_EXPORTS</PreprocessorDefinitions>
<ObjectFileName>$(IntDir)</ObjectFileName>
<ScanSourceForModuleDependencies>false</ScanSourceForModuleDependencies>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;_DEBUG;_WINDOWS;ECLIPSEDUMPER_EXPORTS;_USRDLL;CMAKE_INTDIR=\"Debug\";EclipseDumper_EXPORTS</PreprocessorDefinitions>
<AdditionalIncludeDirectories>C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Api;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Metadata;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Helper;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Offsets;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Il2cpp-Data;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Resources;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Utils;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Midl>
<AdditionalIncludeDirectories>C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Api;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Metadata;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Helper;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Offsets;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Il2cpp-Data;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Resources;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Utils;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
<HeaderFileName>%(Filename).h</HeaderFileName>
<TypeLibraryName>%(Filename).tlb</TypeLibraryName>
<InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
</Midl>
<Link>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>%(AdditionalOptions) /machine:x64</AdditionalOptions>
<DataExecutionPrevention></DataExecutionPrevention>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<ImageHasSafeExceptionHandlers></ImageHasSafeExceptionHandlers>
<ImportLibrary>C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/Debug/EclipseDumper.lib</ImportLibrary>
<LinkErrorReporting></LinkErrorReporting>
<ProgramDataBaseFile>C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/Injector/EclipseDumper.pdb</ProgramDataBaseFile>
<RandomizedBaseAddress></RandomizedBaseAddress>
<SubSystem></SubSystem>
</Link>
<ProjectReference>
<LinkLibraryDependencies>false</LinkLibraryDependencies>
</ProjectReference>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<AdditionalIncludeDirectories>C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Api;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Metadata;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Helper;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Offsets;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Il2cpp-Data;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Resources;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Utils;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<ConformanceMode>true</ConformanceMode>
<ExceptionHandling>Sync</ExceptionHandling>
<ForceConformanceInForLoopScope></ForceConformanceInForLoopScope>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<LanguageStandard>stdcpp20</LanguageStandard>
<MinimalRebuild></MinimalRebuild>
<Optimization>MaxSpeed</Optimization>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<RemoveUnreferencedCodeData></RemoveUnreferencedCodeData>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<SDLCheck>true</SDLCheck>
<SupportJustMyCode></SupportJustMyCode>
<TreatWChar_tAsBuiltInType></TreatWChar_tAsBuiltInType>
<UseFullPaths>false</UseFullPaths>
<PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;_WINDOWS;NDEBUG;ECLIPSEDUMPER_EXPORTS;_USRDLL;CMAKE_INTDIR="Release";EclipseDumper_EXPORTS</PreprocessorDefinitions>
<ObjectFileName>$(IntDir)</ObjectFileName>
<DebugInformationFormat>
</DebugInformationFormat>
<ScanSourceForModuleDependencies>false</ScanSourceForModuleDependencies>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;_WINDOWS;NDEBUG;ECLIPSEDUMPER_EXPORTS;_USRDLL;CMAKE_INTDIR=\"Release\";EclipseDumper_EXPORTS</PreprocessorDefinitions>
<AdditionalIncludeDirectories>C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Api;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Metadata;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Helper;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Offsets;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Il2cpp-Data;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Resources;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Utils;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Midl>
<AdditionalIncludeDirectories>C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Api;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Metadata;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Helper;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Offsets;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Il2cpp-Data;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Resources;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Utils;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
<HeaderFileName>%(Filename).h</HeaderFileName>
<TypeLibraryName>%(Filename).tlb</TypeLibraryName>
<InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
</Midl>
<Link>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>%(AdditionalOptions) /machine:x64</AdditionalOptions>
<DataExecutionPrevention></DataExecutionPrevention>
<GenerateDebugInformation>false</GenerateDebugInformation>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<ImageHasSafeExceptionHandlers></ImageHasSafeExceptionHandlers>
<ImportLibrary>C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/Release/EclipseDumper.lib</ImportLibrary>
<LinkErrorReporting></LinkErrorReporting>
<ProgramDataBaseFile>C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/Injector/EclipseDumper.pdb</ProgramDataBaseFile>
<RandomizedBaseAddress></RandomizedBaseAddress>
<SubSystem></SubSystem>
</Link>
<ProjectReference>
<LinkLibraryDependencies>false</LinkLibraryDependencies>
</ProjectReference>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">
<ClCompile>
<AdditionalIncludeDirectories>C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Api;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Metadata;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Helper;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Offsets;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Il2cpp-Data;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Resources;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Utils;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<ConformanceMode>true</ConformanceMode>
<ExceptionHandling>Sync</ExceptionHandling>
<ForceConformanceInForLoopScope></ForceConformanceInForLoopScope>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<LanguageStandard>stdcpp20</LanguageStandard>
<MinimalRebuild></MinimalRebuild>
<Optimization>MinSpace</Optimization>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<RemoveUnreferencedCodeData></RemoveUnreferencedCodeData>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<SDLCheck>true</SDLCheck>
<SupportJustMyCode></SupportJustMyCode>
<TreatWChar_tAsBuiltInType></TreatWChar_tAsBuiltInType>
<UseFullPaths>false</UseFullPaths>
<PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;_WINDOWS;NDEBUG;ECLIPSEDUMPER_EXPORTS;_USRDLL;CMAKE_INTDIR="MinSizeRel";EclipseDumper_EXPORTS</PreprocessorDefinitions>
<ObjectFileName>$(IntDir)</ObjectFileName>
<DebugInformationFormat>
</DebugInformationFormat>
<ScanSourceForModuleDependencies>false</ScanSourceForModuleDependencies>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;_WINDOWS;NDEBUG;ECLIPSEDUMPER_EXPORTS;_USRDLL;CMAKE_INTDIR=\"MinSizeRel\";EclipseDumper_EXPORTS</PreprocessorDefinitions>
<AdditionalIncludeDirectories>C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Api;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Metadata;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Helper;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Offsets;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Il2cpp-Data;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Resources;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Utils;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Midl>
<AdditionalIncludeDirectories>C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Api;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Metadata;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Helper;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Offsets;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Il2cpp-Data;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Resources;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Utils;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
<HeaderFileName>%(Filename).h</HeaderFileName>
<TypeLibraryName>%(Filename).tlb</TypeLibraryName>
<InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
</Midl>
<Link>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>%(AdditionalOptions) /machine:x64</AdditionalOptions>
<DataExecutionPrevention></DataExecutionPrevention>
<GenerateDebugInformation>false</GenerateDebugInformation>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<ImageHasSafeExceptionHandlers></ImageHasSafeExceptionHandlers>
<ImportLibrary>C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/MinSizeRel/EclipseDumper.lib</ImportLibrary>
<LinkErrorReporting></LinkErrorReporting>
<ProgramDataBaseFile>C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/MinSizeRel/EclipseDumper.pdb</ProgramDataBaseFile>
<RandomizedBaseAddress></RandomizedBaseAddress>
<SubSystem></SubSystem>
</Link>
<ProjectReference>
<LinkLibraryDependencies>false</LinkLibraryDependencies>
</ProjectReference>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">
<ClCompile>
<AdditionalIncludeDirectories>C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Api;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Metadata;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Helper;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Offsets;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Il2cpp-Data;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Resources;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Utils;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<ConformanceMode>true</ConformanceMode>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<ExceptionHandling>Sync</ExceptionHandling>
<ForceConformanceInForLoopScope></ForceConformanceInForLoopScope>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<LanguageStandard>stdcpp20</LanguageStandard>
<MinimalRebuild></MinimalRebuild>
<Optimization>MaxSpeed</Optimization>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<RemoveUnreferencedCodeData></RemoveUnreferencedCodeData>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<SDLCheck>true</SDLCheck>
<SupportJustMyCode></SupportJustMyCode>
<TreatWChar_tAsBuiltInType></TreatWChar_tAsBuiltInType>
<UseFullPaths>false</UseFullPaths>
<PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;_WINDOWS;NDEBUG;ECLIPSEDUMPER_EXPORTS;_USRDLL;CMAKE_INTDIR="RelWithDebInfo";EclipseDumper_EXPORTS</PreprocessorDefinitions>
<ObjectFileName>$(IntDir)</ObjectFileName>
<ScanSourceForModuleDependencies>false</ScanSourceForModuleDependencies>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>%(PreprocessorDefinitions);WIN32;_WINDOWS;NDEBUG;ECLIPSEDUMPER_EXPORTS;_USRDLL;CMAKE_INTDIR=\"RelWithDebInfo\";EclipseDumper_EXPORTS</PreprocessorDefinitions>
<AdditionalIncludeDirectories>C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Api;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Metadata;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Helper;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Offsets;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Il2cpp-Data;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Resources;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Utils;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Midl>
<AdditionalIncludeDirectories>C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Api;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Metadata;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Helper;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Offsets;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Il2cpp-Data;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Resources;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Utils;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
<HeaderFileName>%(Filename).h</HeaderFileName>
<TypeLibraryName>%(Filename).tlb</TypeLibraryName>
<InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
</Midl>
<Link>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>%(AdditionalOptions) /machine:x64</AdditionalOptions>
<DataExecutionPrevention></DataExecutionPrevention>
<GenerateDebugInformation>true</GenerateDebugInformation>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<ImageHasSafeExceptionHandlers></ImageHasSafeExceptionHandlers>
<ImportLibrary>C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/RelWithDebInfo/EclipseDumper.lib</ImportLibrary>
<LinkErrorReporting></LinkErrorReporting>
<ProgramDataBaseFile>C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/RelWithDebInfo/EclipseDumper.pdb</ProgramDataBaseFile>
<RandomizedBaseAddress></RandomizedBaseAddress>
<SubSystem></SubSystem>
</Link>
<ProjectReference>
<LinkLibraryDependencies>false</LinkLibraryDependencies>
</ProjectReference>
</ItemDefinitionGroup>
<ItemGroup>
<CustomBuild Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeLists.txt">
<UseUtf8Encoding>Always</UseUtf8Encoding>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Building Custom Rule C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/CMakeLists.txt</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">setlocal
C:\Users\Admin\scoop\apps\cmake\current\bin\cmake.exe "-SC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" "-BC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" --check-stamp-file "C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/CMakeFiles/generate.stamp"
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal &amp; call :cmErrorLevel %errorlevel% &amp; goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeCXXCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeRCCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCXXInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCommonLanguageInclude.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeGenericSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeInitializeConfigs.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeLanguageInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeRCInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInitialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\CMakeCommonCompilerMacros.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCXXLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCommonLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-Initialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\WindowsPaths.cmake;%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\generate.stamp</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkObjects>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Building Custom Rule C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/CMakeLists.txt</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">setlocal
C:\Users\Admin\scoop\apps\cmake\current\bin\cmake.exe "-SC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" "-BC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" --check-stamp-file "C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/CMakeFiles/generate.stamp"
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal &amp; call :cmErrorLevel %errorlevel% &amp; goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeCXXCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeRCCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCXXInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCommonLanguageInclude.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeGenericSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeInitializeConfigs.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeLanguageInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeRCInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInitialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\CMakeCommonCompilerMacros.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCXXLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCommonLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-Initialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\WindowsPaths.cmake;%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\generate.stamp</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkObjects>
<Message Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">Building Custom Rule C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/CMakeLists.txt</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">setlocal
C:\Users\Admin\scoop\apps\cmake\current\bin\cmake.exe "-SC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" "-BC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" --check-stamp-file "C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/CMakeFiles/generate.stamp"
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal &amp; call :cmErrorLevel %errorlevel% &amp; goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeCXXCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeRCCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCXXInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCommonLanguageInclude.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeGenericSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeInitializeConfigs.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeLanguageInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeRCInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInitialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\CMakeCommonCompilerMacros.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCXXLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCommonLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-Initialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\WindowsPaths.cmake;%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\generate.stamp</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">false</LinkObjects>
<Message Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">Building Custom Rule C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/CMakeLists.txt</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">setlocal
C:\Users\Admin\scoop\apps\cmake\current\bin\cmake.exe "-SC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" "-BC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" --check-stamp-file "C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/CMakeFiles/generate.stamp"
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal &amp; call :cmErrorLevel %errorlevel% &amp; goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeCXXCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeRCCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCXXInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCommonLanguageInclude.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeGenericSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeInitializeConfigs.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeLanguageInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeRCInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInitialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\CMakeCommonCompilerMacros.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCXXLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCommonLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-Initialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\WindowsPaths.cmake;%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\generate.stamp</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">false</LinkObjects>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Api\Il2CppApi.cpp" />
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Metadata\Il2CppMetadata.cpp" />
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Helper\Il2CppHelper.cpp" />
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\EntryPoint\dllmain.cpp" />
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen\ProtoMetadata.cpp" />
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen\ProtoCache.cpp" />
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen\ProtoOutput.cpp" />
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen\ProtoUtil.cpp" />
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Resources\pch.cpp" />
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Utils\ScriptJson.cpp" />
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Utils\ProgressReporter.cpp" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<ProjectReference Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ZERO_CHECK.vcxproj">
<Project>{E350C7EB-35F8-33BC-984B-A741D3851522}</Project>
<Name>ZERO_CHECK</Name>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View file

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="17.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Api\Il2CppApi.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Metadata\Il2CppMetadata.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Core\il2cpp\Helper\Il2CppHelper.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\EntryPoint\dllmain.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen\ProtoMetadata.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen\ProtoCache.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen\ProtoOutput.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\ProtoGen\ProtoUtil.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Resources\pch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Utils\ScriptJson.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\Utils\ProgressReporter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeLists.txt" />
</ItemGroup>
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{37E61475-49CA-35C7-9012-9C03350E1ECE}</UniqueIdentifier>
</Filter>
</ItemGroup>
</Project>

168
EntryPoint/dllmain.cpp Normal file
View file

@ -0,0 +1,168 @@
#include "pch.h"
#include "Il2CppApi.h"
#include "Il2CppHelper.h"
#include "Il2CppMetadata.h"
#include "ProtoMetadata.h"
#include "ScriptJson.h"
#include "ProgressReporter.h"
#include <functional>
#include <chrono>
#include <iomanip>
#include <fstream>
#define DEBUG_VER
//#define RELEASE_VER
static DWORD WINAPI UnloadDll(LPVOID d) {
std::cout << "Dll Unloaded\n";
FreeConsole();
FreeLibraryAndExitThread((HMODULE)d, 0);
}
BOOL WINAPI DllMain(const HMODULE instance, DWORD reason)
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(instance);
CreateThread(nullptr, 0, MainThread, instance, 0, nullptr);
break;
case DLL_PROCESS_DETACH:
break;
}
return true;
}
DWORD WINAPI MainThread(LPVOID lpReserved) {
// Setup console for UTF-8 output
AllocConsole();
SetConsoleOutputCP(CP_UTF8);
SetConsoleCP(CP_UTF8);
FILE* console;
freopen_s(&console, "CONOUT$", "w", stdout);
freopen_s(&console, "CONIN$", "r", stdin);
// Initial messages
std::cout << R"(
)" << "\n";
std::cout << "Waiting for il2cpp initialization... (Press Enter when ready)\n";
while (!(GetAsyncKeyState(VK_RETURN) & 0x8000)) {
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
std::cout << "\n=== Starting Dump Process ===\n";
Il2CppApi::GCDisable();
std::ofstream dumpFile("dump.cs");
if (!dumpFile.is_open()) {
std::cerr << "FATAL ERROR: Failed to create output file!\n";
return 1;
}
size_t count = 0;
Il2CppAssembly** assemblies = Il2CppApi::DomainGetAssemblies(&count);
ProgressReporter dumpReporter(count, 50);
for (size_t index = 0; index < count; ++index) {
Il2CppAssembly* assembly = assemblies[index];
if (!assembly) continue;
auto image = Il2CppApi::AssemblyGetImage(assembly);
auto assemblyName = Il2CppApi::AssemblyGetName(assembly);
auto classCount = Il2CppApi::ImageGetClassCount(image);
for(int i = 0; i < classCount; i++) {
Il2CppClass* klass = Il2CppApi::ImageGetClass(image, i);
if(!klass) continue;
auto namespaze = Il2CppApi::ClassGetNamespace(klass);
auto className = Il2CppApi::ClassGetName(klass);
try {
dumpFile << "// Module: " << assemblyName << "\n";
dumpFile << "// Namespace: " << namespaze << "\n";
if(!std::string(namespaze).empty()) dumpFile << "// FullName: " << namespaze << "." << className << "\n";
else dumpFile << "// FullName: " << className << "\n";
std::string classDump = Il2CppMetadata::DumpClass(klass);
if(!classDump.empty()) dumpFile << classDump << "\n\n";
}
catch (const std::exception& e) {
std::cout << "An exception happened! " << e.what() << "\n";
}
}
dumpReporter.update(index);
}
dumpReporter.finish();
dumpFile.close();
std::cout << "\n=== Generating Proto File ===\n";
Il2CppApi::ThreadAttach(Il2CppApi::DomainGet());
std::ofstream protoFile("main.proto");
if (!protoFile.is_open()) {
std::cerr << "FATAL ERROR: Failed to create proto file!\n";
return 1;
}
const Il2CppAssembly* protoAssembly = Il2CppApi::DomainAssemblyOpen("Assembly-CSharp.dll");
const Il2CppImage* protoImage = Il2CppApi::AssemblyGetImage(protoAssembly);
auto protoCount = Il2CppApi::ImageGetClassCount(protoImage);
ProgressReporter protoReporter(protoCount, 50);
for(uint32_t i = 0; i < protoCount; i++) {
Il2CppClass* klass = Il2CppApi::ImageGetClass(protoImage, i);
if(!klass) continue;
auto parent = Il2CppApi::ClassGetParent(klass);
if(!parent) continue;
auto parent_name = Il2CppApi::ClassGetName(parent);
if(strcmp(parent_name, PROTO_CLASS) != 0) continue;
try {
std::string protoDump = ProtoMetadata::DumpProto(klass);
if(!protoDump.empty()) protoFile << protoDump << "\n\n";
}
catch (const std::exception& e) {
std::cout << "An exception happened! " << e.what() << "\n";
}
protoReporter.update(i);
}
protoReporter.finish();
protoFile.close();
// Generate script.json (optional, keep if needed)
std::cout << "\n=== Generating Script JSON ===\n";
std::ofstream jsonFile("script.json");
if (jsonFile.is_open()) {
jsonFile << ScriptJsonGenerator::GenerateJson();
jsonFile.close();
std::cout << "JSON metadata saved to script.json\n";
}
else {
std::cerr << "Failed to create script.json\n";
}
std::cout << "\nDumping completed\n";
UnloadDll(lpReserved);
return 0;
}

View file

@ -0,0 +1,158 @@
#include "pch.h"
#pragma once
#include <cstdint>
#include "il2cpp-metadata.h"
// il2cpp-types.h
// Add forward declarations for all referenced types
struct Il2CppType;
struct Il2CppGenericClass;
struct Il2CppTypeDefinition;
struct Il2CppInteropData;
struct FieldInfo;
struct EventInfo;
struct PropertyInfo;
struct Il2CppRuntimeInterfaceOffsetPair;
struct Il2CppRGCTXData;
struct VirtualInvokeData;
struct Il2CppMethodDefinition;
struct Il2CppGenericMethod;
struct Il2CppGenericContainer;
struct ParameterInfo;
// Define function pointer types
typedef void (*Il2CppMethodPointer)();
typedef void* (*InvokerMethod)(Il2CppMethodPointer, const struct MethodInfo*, void*, void**);
// Add this before Il2CppClass definition
#ifdef _MSC_VER
#define ALIGN_TYPE(n) __declspec(align(n))
#else
#define ALIGN_TYPE(n) __attribute__((aligned(n)))
#endif
// Add VirtualInvokeData definition
struct VirtualInvokeData {
void* methodPtr;
const struct MethodInfo* method;
};
// Define IL2CPP_ZERO_LEN_ARRAY if missing
#ifndef IL2CPP_ZERO_LEN_ARRAY
#define IL2CPP_ZERO_LEN_ARRAY 1
#endif
struct Il2CppClass
{
// The following fields are always valid for a Il2CppClass structure
const Il2CppImage* image;
void* gc_desc;
const char* name;
const char* namespaze;
const Il2CppType* byval_arg;
const Il2CppType* this_arg;
Il2CppClass* element_class;
Il2CppClass* castClass;
Il2CppClass* declaringType;
Il2CppClass* parent;
const Il2CppTypeDefinition* typeDefinition; // non-NULL for Il2CppClass's constructed from type defintions
Il2CppGenericClass* generic_class;
const Il2CppInteropData* interopData;
// End always valid fields
// The following fields need initialized before access. This can be done per field or as an aggregate via a call to Class::Init
FieldInfo* fields; // Initialized in SetupFields
const EventInfo* events; // Initialized in SetupEvents
const PropertyInfo* properties; // Initialized in SetupProperties
const MethodInfo** methods; // Initialized in SetupMethods
Il2CppClass** nestedTypes; // Initialized in SetupNestedTypes
Il2CppClass** implementedInterfaces; // Initialized in SetupInterfaces
Il2CppRuntimeInterfaceOffsetPair* interfaceOffsets; // Initialized in Init
void* static_fields; // Initialized in Init
const Il2CppRGCTXData* rgctx_data; // Initialized in Init
// used for fast parent checks
Il2CppClass** typeHierarchy; // Initialized in SetupTypeHierachy
// End initialization required fields
uint32_t cctor_started;
uint32_t cctor_finished;
ALIGN_TYPE(8) uint64_t cctor_thread;
// Remaining fields are always valid except where noted
GenericContainerIndex genericContainerIndex;
CustomAttributeIndex customAttributeIndex;
uint32_t instance_size;
uint32_t actualSize;
uint32_t element_size;
int32_t native_size;
uint32_t static_fields_size;
uint32_t thread_static_fields_size;
int32_t thread_static_fields_offset;
uint32_t flags;
uint32_t token;
uint16_t method_count; // lazily calculated for arrays, i.e. when rank > 0
uint16_t property_count;
uint16_t field_count;
uint16_t event_count;
uint16_t nested_type_count;
uint16_t vtable_count; // lazily calculated for arrays, i.e. when rank > 0
uint16_t interfaces_count;
uint16_t interface_offsets_count; // lazily calculated for arrays, i.e. when rank > 0
uint8_t typeHierarchyDepth; // Initialized in SetupTypeHierachy
uint8_t genericRecursionDepth;
uint8_t rank;
uint8_t minimumAlignment;
uint8_t packingSize;
uint8_t valuetype : 1;
uint8_t initialized : 1;
uint8_t enumtype : 1;
uint8_t is_generic : 1;
uint8_t has_references : 1;
uint8_t init_pending : 1;
uint8_t size_inited : 1;
uint8_t has_finalize : 1;
uint8_t has_cctor : 1;
uint8_t is_blittable : 1;
uint8_t is_import_or_windows_runtime : 1;
uint8_t is_vtable_initialized : 1;
VirtualInvokeData vtable[IL2CPP_ZERO_LEN_ARRAY];
};
typedef struct MethodInfo
{
void* methodPointer;
char _padding[8]; // Added 8 bytes of padding for methodPointer
char invoker_method;
const char* name;
void* klass;
Il2CppType* return_type;
const void* parameters;
union
{
const void* rgctx_data; /* is_inflated is true and is_generic is false, i.e. a generic instance method */
const void* methodDefinition;
};
/* note, when is_generic == true and is_inflated == true the method represents an uninflated generic method on an inflated type. */
union
{
const void* genericMethod; /* is_inflated is true */
const void* genericContainer; /* is_inflated is false and is_generic is true */
};
uint32_t token;
uint16_t flags;
uint16_t iflags;
uint16_t slot;
uint8_t parameters_count;
uint8_t is_generic : 1; /* true if method is a generic method definition */
uint8_t is_inflated : 1; /* true if declaring_type is a generic instance or if method is a generic instance*/
uint8_t wrapper_type : 1; /* always zero (MONO_WRAPPER_NONE) needed for the debugger */
uint8_t is_marshaled_from_native : 1; /* a fake MethodInfo wrapping a native function pointer */
} MethodInfo;

152
Il2cpp-Data/il2cpp-class.h Normal file
View file

@ -0,0 +1,152 @@
#pragma once
#include <cstdint>
typedef uint16_t Il2CppChar;
typedef uintptr_t il2cpp_array_size_t;
typedef int32_t TypeDefinitionIndex;
typedef int32_t GenericParameterIndex;
typedef char Il2CppNativeChar;
typedef struct Il2CppMemoryCallbacks Il2CppMemoryCallbacks;
typedef struct Il2CppMethod Il2CppMethod;
typedef struct Il2CppField Il2CppField;
typedef struct Il2CppClass Il2CppClass;
typedef struct Il2CppArrayBounds Il2CppArrayBounds;
typedef struct Il2CppAssembly Il2CppAssembly;
typedef struct Il2CppArrayType Il2CppArrayType;
typedef struct Il2CppGenericClass Il2CppGenericClass;
typedef struct Il2CppReflectionType Il2CppReflectionType;
typedef struct MonitorData MonitorData;
typedef Il2CppClass Il2CppVTable;
typedef struct EventInfo EventInfo;
typedef struct FieldInfo FieldInfo;
typedef struct PropertyInfo PropertyInfo;
typedef struct Il2CppDomain Il2CppDomain;
typedef struct Il2CppException Il2CppException;
typedef struct Il2CppObject Il2CppObject;
typedef struct Il2CppReflectionMethod Il2CppReflectionMethod;
typedef struct Il2CppString Il2CppString;
typedef struct Il2CppThread Il2CppThread;
typedef struct Il2CppStackFrameInfo Il2CppStackFrameInfo;
typedef struct Il2CppManagedMemorySnapshot Il2CppManagedMemorySnapshot;
typedef struct Il2CppDebuggerTransport Il2CppDebuggerTransport;
typedef struct Il2CppMethodDebugInfo Il2CppMethodDebugInfo;
typedef struct Il2CppCustomAttrInfo Il2CppCustomAttrInfo;
typedef const struct ___Il2CppMetadataTypeHandle* Il2CppMetadataTypeHandle;
typedef const struct ___Il2CppMetadataGenericParameterHandle* Il2CppMetadataGenericParameterHandle;
typedef void (*Il2CppMethodPointer)();
typedef void (*il2cpp_register_object_callback)(Il2CppObject** arr, int size, void* userdata);
typedef void* (*il2cpp_liveness_reallocate_callback)(void* ptr, size_t size, void* userdata);
typedef void (*Il2CppFrameWalkFunc)(const Il2CppStackFrameInfo* info, void* user_data);
typedef size_t(*Il2CppBacktraceFunc)(Il2CppMethodPointer* buffer, size_t maxSize);
typedef const Il2CppNativeChar* (*Il2CppSetFindPlugInCallback)(const Il2CppNativeChar*);
typedef void (*Il2CppLogCallback)(const char*);
typedef enum {
IL2CPP_UNHANDLED_POLICY_LEGACY,
IL2CPP_UNHANDLED_POLICY_CURRENT
} Il2CppRuntimeUnhandledExceptionPolicy;
typedef enum {
IL2CPP_GC_MODE_DISABLED = 0,
IL2CPP_GC_MODE_ENABLED = 1,
IL2CPP_GC_MODE_MANUAL = 2
} Il2CppGCMode;
typedef enum Il2CppStat {
IL2CPP_STAT_NEW_OBJECT_COUNT,
IL2CPP_STAT_INITIALIZED_CLASS_COUNT,
IL2CPP_STAT_METHOD_COUNT,
IL2CPP_STAT_CLASS_STATIC_DATA_SIZE,
IL2CPP_STAT_GENERIC_INSTANCE_COUNT,
IL2CPP_STAT_GENERIC_CLASS_COUNT,
IL2CPP_STAT_INFLATED_METHOD_COUNT,
IL2CPP_STAT_INFLATED_TYPE_COUNT,
} Il2CppStat;
typedef enum Il2CppTypeEnum {
IL2CPP_TYPE_END = 0x00,
IL2CPP_TYPE_VOID = 0x01,
IL2CPP_TYPE_BOOLEAN = 0x02,
IL2CPP_TYPE_CHAR = 0x03,
IL2CPP_TYPE_I1 = 0x04,
IL2CPP_TYPE_U1 = 0x05,
IL2CPP_TYPE_I2 = 0x06,
IL2CPP_TYPE_U2 = 0x07,
IL2CPP_TYPE_I4 = 0x08,
IL2CPP_TYPE_U4 = 0x09,
IL2CPP_TYPE_I8 = 0x0a,
IL2CPP_TYPE_U8 = 0x0b,
IL2CPP_TYPE_R4 = 0x0c,
IL2CPP_TYPE_R8 = 0x0d,
IL2CPP_TYPE_STRING = 0x0e,
IL2CPP_TYPE_PTR = 0x0f,
//updated to current version
IL2CPP_TYPE_BYREF = 0x40,
IL2CPP_TYPE_VALUETYPE = 0x11,
IL2CPP_TYPE_CLASS = 0x12,
IL2CPP_TYPE_VAR = 0x13,
IL2CPP_TYPE_ARRAY = 0x14,
IL2CPP_TYPE_GENERICINST = 0x15,
IL2CPP_TYPE_TYPEDBYREF = 0x16,
IL2CPP_TYPE_I = 0x18,
IL2CPP_TYPE_U = 0x19,
IL2CPP_TYPE_FNPTR = 0x1b,
IL2CPP_TYPE_OBJECT = 0x1c,
IL2CPP_TYPE_SZARRAY = 0x1d,
IL2CPP_TYPE_MVAR = 0x1e,
IL2CPP_TYPE_CMOD_REQD = 0x1f,
IL2CPP_TYPE_CMOD_OPT = 0x20,
IL2CPP_TYPE_INTERNAL = 0x21,
IL2CPP_TYPE_MODIFIER = 0x40,
IL2CPP_TYPE_SENTINEL = 0x41,
IL2CPP_TYPE_PINNED = 0x45,
IL2CPP_TYPE_ENUM = 0x55,
IL2CPP_TYPE_IL2CPP_TYPE_INDEX = 0xff
} Il2CppTypeEnum;
typedef struct Il2CppType {
char pad[8];
unsigned int attrs;
Il2CppTypeEnum type : 8;
} Il2CppType;
typedef struct Il2CppObject {
union {
Il2CppClass* klass;
Il2CppVTable* vtable;
};
MonitorData* monitor;
} Il2CppObject;
typedef struct Il2CppArray {
Il2CppObject obj;
Il2CppArrayBounds* bounds;
il2cpp_array_size_t max_length;
void* vector[32];
} Il2CppArray;
typedef struct Il2CppImage {
const char* name;
TypeDefinitionIndex typeStart;
void* typeHierarchy;
uint32_t typeCount;
uint32_t exportedTypeCount;
} Il2CppImage;
typedef struct Il2CppGenericContainer {
uint32_t type_argc;
const void** type_argv;
} Il2CppGenericContainer;
typedef struct Il2CppGenericClass {
Il2CppGenericContainer* genericContainer;
} Il2CppGenericClass;

View file

@ -0,0 +1,464 @@
#include "pch.h"
#pragma once
#include <stdint.h>
// This file contains the structures specifying how we store converted metadata.
// These structures have 3 constraints:
// 1. These structures will be stored in an external file, and as such must not contain any pointers.
// All references to other metadata should occur via an index into a corresponding table.
// 2. These structures are assumed to be const. Either const structures in the binary or mapped as
// readonly memory from an external file. Do not add any 'calculated' fields which will be written to at runtime.
// 3. These structures should be optimized for size. Other structures are used at runtime which can
// be larger to store cached information
typedef int32_t TypeIndex;
typedef int32_t TypeDefinitionIndex;
typedef int32_t FieldIndex;
typedef int32_t DefaultValueIndex;
typedef int32_t DefaultValueDataIndex;
typedef int32_t CustomAttributeIndex;
typedef int32_t ParameterIndex;
typedef int32_t MethodIndex;
typedef int32_t GenericMethodIndex;
typedef int32_t PropertyIndex;
typedef int32_t EventIndex;
typedef int32_t GenericContainerIndex;
typedef int32_t GenericParameterIndex;
typedef int16_t GenericParameterConstraintIndex;
typedef int32_t NestedTypeIndex;
typedef int32_t InterfacesIndex;
typedef int32_t VTableIndex;
typedef int32_t InterfaceOffsetIndex;
typedef int32_t RGCTXIndex;
typedef int32_t StringIndex;
typedef int32_t StringLiteralIndex;
typedef int32_t GenericInstIndex;
typedef int32_t ImageIndex;
typedef int32_t AssemblyIndex;
typedef int32_t InteropDataIndex;
const TypeIndex kTypeIndexInvalid = -1;
const TypeDefinitionIndex kTypeDefinitionIndexInvalid = -1;
const DefaultValueDataIndex kDefaultValueIndexNull = -1;
const EventIndex kEventIndexInvalid = -1;
const FieldIndex kFieldIndexInvalid = -1;
const MethodIndex kMethodIndexInvalid = -1;
const PropertyIndex kPropertyIndexInvalid = -1;
const GenericContainerIndex kGenericContainerIndexInvalid = -1;
const GenericParameterIndex kGenericParameterIndexInvalid = -1;
const RGCTXIndex kRGCTXIndexInvalid = -1;
const StringLiteralIndex kStringLiteralIndexInvalid = -1;
const InteropDataIndex kInteropDataIndexInvalid = -1;
// Encoded index (1 bit)
// MethodDef - 0
// MethodSpec - 1
// We use the top 3 bits to indicate what table to index into
// Type Binary Hex
// Il2CppClass 001 0x20000000
// Il2CppType 010 0x40000000
// MethodInfo 011 0x60000000
// FieldInfo 100 0x80000000
// StringLiteral 101 0xA0000000
// MethodRef 110 0xC0000000
typedef uint32_t EncodedMethodIndex;
enum Il2CppMetadataUsage
{
kIl2CppMetadataUsageInvalid,
kIl2CppMetadataUsageTypeInfo,
kIl2CppMetadataUsageIl2CppType,
kIl2CppMetadataUsageMethodDef,
kIl2CppMetadataUsageFieldInfo,
kIl2CppMetadataUsageStringLiteral,
kIl2CppMetadataUsageMethodRef,
};
static inline Il2CppMetadataUsage GetEncodedIndexType(EncodedMethodIndex index)
{
return (Il2CppMetadataUsage)((index & 0xE0000000) >> 29);
}
static inline uint32_t GetDecodedMethodIndex(EncodedMethodIndex index)
{
return index & 0x1FFFFFFFU;
}
struct Il2CppImage;
struct Il2CppType;
struct Il2CppTypeDefinitionMetadata;
union Il2CppRGCTXDefinitionData
{
int32_t rgctxDataDummy;
MethodIndex methodIndex;
TypeIndex typeIndex;
};
enum Il2CppRGCTXDataType
{
IL2CPP_RGCTX_DATA_INVALID,
IL2CPP_RGCTX_DATA_TYPE,
IL2CPP_RGCTX_DATA_CLASS,
IL2CPP_RGCTX_DATA_METHOD,
IL2CPP_RGCTX_DATA_ARRAY,
};
struct Il2CppRGCTXDefinition
{
Il2CppRGCTXDataType type;
Il2CppRGCTXDefinitionData data;
};
struct Il2CppInterfaceOffsetPair
{
TypeIndex interfaceTypeIndex;
int32_t offset;
};
struct Il2CppTypeDefinition
{
StringIndex nameIndex;
StringIndex namespaceIndex;
CustomAttributeIndex customAttributeIndex;
TypeIndex byvalTypeIndex;
TypeIndex byrefTypeIndex;
TypeIndex declaringTypeIndex;
TypeIndex parentIndex;
TypeIndex elementTypeIndex; // we can probably remove this one. Only used for enums
RGCTXIndex rgctxStartIndex;
int32_t rgctxCount;
GenericContainerIndex genericContainerIndex;
uint32_t flags;
FieldIndex fieldStart;
MethodIndex methodStart;
EventIndex eventStart;
PropertyIndex propertyStart;
NestedTypeIndex nestedTypesStart;
InterfacesIndex interfacesStart;
VTableIndex vtableStart;
InterfacesIndex interfaceOffsetsStart;
uint16_t method_count;
uint16_t property_count;
uint16_t field_count;
uint16_t event_count;
uint16_t nested_type_count;
uint16_t vtable_count;
uint16_t interfaces_count;
uint16_t interface_offsets_count;
// bitfield to portably encode boolean values as single bits
// 01 - valuetype;
// 02 - enumtype;
// 03 - has_finalize;
// 04 - has_cctor;
// 05 - is_blittable;
// 06 - is_import_or_windows_runtime;
// 07-10 - One of nine possible PackingSize values (0, 1, 2, 4, 8, 16, 32, 64, or 128)
uint32_t bitfield;
uint32_t token;
};
struct Il2CppFieldDefinition
{
StringIndex nameIndex;
TypeIndex typeIndex;
CustomAttributeIndex customAttributeIndex;
uint32_t token;
};
struct Il2CppFieldDefaultValue
{
FieldIndex fieldIndex;
TypeIndex typeIndex;
DefaultValueDataIndex dataIndex;
};
struct Il2CppFieldMarshaledSize
{
FieldIndex fieldIndex;
TypeIndex typeIndex;
int32_t size;
};
struct Il2CppFieldRef
{
TypeIndex typeIndex;
FieldIndex fieldIndex; // local offset into type fields
};
struct Il2CppParameterDefinition
{
StringIndex nameIndex;
uint32_t token;
CustomAttributeIndex customAttributeIndex;
TypeIndex typeIndex;
};
struct Il2CppParameterDefaultValue
{
ParameterIndex parameterIndex;
TypeIndex typeIndex;
DefaultValueDataIndex dataIndex;
};
struct Il2CppMethodDefinition
{
StringIndex nameIndex;
TypeDefinitionIndex declaringType;
TypeIndex returnType;
ParameterIndex parameterStart;
CustomAttributeIndex customAttributeIndex;
GenericContainerIndex genericContainerIndex;
MethodIndex methodIndex;
MethodIndex invokerIndex;
MethodIndex reversePInvokeWrapperIndex;
RGCTXIndex rgctxStartIndex;
int32_t rgctxCount;
uint32_t token;
uint16_t flags;
uint16_t iflags;
uint16_t slot;
uint16_t parameterCount;
};
struct Il2CppEventDefinition
{
StringIndex nameIndex;
TypeIndex typeIndex;
MethodIndex add;
MethodIndex remove;
MethodIndex raise;
CustomAttributeIndex customAttributeIndex;
uint32_t token;
};
struct Il2CppPropertyDefinition
{
StringIndex nameIndex;
MethodIndex get;
MethodIndex set;
uint32_t attrs;
CustomAttributeIndex customAttributeIndex;
uint32_t token;
};
struct Il2CppMethodSpec
{
MethodIndex methodDefinitionIndex;
GenericInstIndex classIndexIndex;
GenericInstIndex methodIndexIndex;
};
struct Il2CppStringLiteral
{
uint32_t length;
StringLiteralIndex dataIndex;
};
struct Il2CppGenericMethodIndices
{
MethodIndex methodIndex;
MethodIndex invokerIndex;
};
struct Il2CppGenericMethodFunctionsDefinitions
{
GenericMethodIndex genericMethodIndex;
Il2CppGenericMethodIndices indices;
};
const int kPublicKeyByteLength = 8;
struct Il2CppAssemblyName
{
StringIndex nameIndex;
StringIndex cultureIndex;
StringIndex hashValueIndex;
StringIndex publicKeyIndex;
uint32_t hash_alg;
int32_t hash_len;
uint32_t flags;
int32_t major;
int32_t minor;
int32_t build;
int32_t revision;
uint8_t publicKeyToken[kPublicKeyByteLength];
};
struct Il2CppImageDefinition
{
StringIndex nameIndex;
AssemblyIndex assemblyIndex;
TypeDefinitionIndex typeStart;
uint32_t typeCount;
TypeDefinitionIndex exportedTypeStart;
uint32_t exportedTypeCount;
MethodIndex entryPointIndex;
uint32_t token;
};
struct Il2CppAssembly
{
Il2CppImage* image;
ImageIndex imageIndex;
CustomAttributeIndex customAttributeIndex;
int32_t referencedAssemblyStart;
int32_t referencedAssemblyCount;
Il2CppAssemblyName aname;
};
struct Il2CppMetadataUsageList
{
uint32_t start;
uint32_t count;
};
struct Il2CppMetadataUsagePair
{
uint32_t destinationIndex;
uint32_t encodedSourceIndex;
};
struct Il2CppCustomAttributeTypeRange
{
int32_t start;
int32_t count;
};
struct Il2CppRange
{
int32_t start;
int32_t length;
};
struct Il2CppWindowsRuntimeTypeNamePair
{
StringIndex nameIndex;
TypeIndex typeIndex;
};
#pragma pack(push, p1,4)
struct Il2CppGlobalMetadataHeader
{
int32_t sanity;
int32_t version;
int32_t stringLiteralOffset; // string data for managed code
int32_t stringLiteralCount;
int32_t stringLiteralDataOffset;
int32_t stringLiteralDataCount;
int32_t stringOffset; // string data for metadata
int32_t stringCount;
int32_t eventsOffset; // Il2CppEventDefinition
int32_t eventsCount;
int32_t propertiesOffset; // Il2CppPropertyDefinition
int32_t propertiesCount;
int32_t methodsOffset; // Il2CppMethodDefinition
int32_t methodsCount;
int32_t parameterDefaultValuesOffset; // Il2CppParameterDefaultValue
int32_t parameterDefaultValuesCount;
int32_t fieldDefaultValuesOffset; // Il2CppFieldDefaultValue
int32_t fieldDefaultValuesCount;
int32_t fieldAndParameterDefaultValueDataOffset; // uint8_t
int32_t fieldAndParameterDefaultValueDataCount;
int32_t fieldMarshaledSizesOffset; // Il2CppFieldMarshaledSize
int32_t fieldMarshaledSizesCount;
int32_t parametersOffset; // Il2CppParameterDefinition
int32_t parametersCount;
int32_t fieldsOffset; // Il2CppFieldDefinition
int32_t fieldsCount;
int32_t genericParametersOffset; // Il2CppGenericParameter
int32_t genericParametersCount;
int32_t genericParameterConstraintsOffset; // TypeIndex
int32_t genericParameterConstraintsCount;
int32_t genericContainersOffset; // Il2CppGenericContainer
int32_t genericContainersCount;
int32_t nestedTypesOffset; // TypeDefinitionIndex
int32_t nestedTypesCount;
int32_t interfacesOffset; // TypeIndex
int32_t interfacesCount;
int32_t vtableMethodsOffset; // EncodedMethodIndex
int32_t vtableMethodsCount;
int32_t interfaceOffsetsOffset; // Il2CppInterfaceOffsetPair
int32_t interfaceOffsetsCount;
int32_t typeDefinitionsOffset; // Il2CppTypeDefinition
int32_t typeDefinitionsCount;
int32_t rgctxEntriesOffset; // Il2CppRGCTXDefinition
int32_t rgctxEntriesCount;
int32_t imagesOffset; // Il2CppImageDefinition
int32_t imagesCount;
int32_t assembliesOffset; // Il2CppAssemblyDefinition
int32_t assembliesCount;
int32_t metadataUsageListsOffset; // Il2CppMetadataUsageList
int32_t metadataUsageListsCount;
int32_t metadataUsagePairsOffset; // Il2CppMetadataUsagePair
int32_t metadataUsagePairsCount;
int32_t fieldRefsOffset; // Il2CppFieldRef
int32_t fieldRefsCount;
int32_t referencedAssembliesOffset; // int32_t
int32_t referencedAssembliesCount;
int32_t attributesInfoOffset; // Il2CppCustomAttributeTypeRange
int32_t attributesInfoCount;
int32_t attributeTypesOffset; // TypeIndex
int32_t attributeTypesCount;
int32_t unresolvedVirtualCallParameterTypesOffset; // TypeIndex
int32_t unresolvedVirtualCallParameterTypesCount;
int32_t unresolvedVirtualCallParameterRangesOffset; // Il2CppRange
int32_t unresolvedVirtualCallParameterRangesCount;
int32_t windowsRuntimeTypeNamesOffset; // Il2CppWindowsRuntimeTypeNamePair
int32_t windowsRuntimeTypeNamesSize;
int32_t exportedTypeDefinitionsOffset; // TypeDefinitionIndex
int32_t exportedTypeDefinitionsCount;
};
#pragma pack(pop, p1)
#if RUNTIME_MONO
#pragma pack(push, p1,4)
struct Il2CppGlobalMonoMetadataHeader
{
int32_t sanity;
int32_t version;
int32_t stringOffset; // string data for metadata
int32_t stringCount;
int32_t methodInfoMappingOffset; // hash -> MonoMethodInfo mapping
int32_t methodInfoMappingCount;
int32_t genericMethodInfoMappingOffset; // hash -> generic MonoMethodInfo mapping
int32_t genericMethodInfoMappingCount;
int32_t rgctxIndicesOffset; // runtime generic context indices
int32_t rgctxIndicesCount;
int32_t rgctxInfoOffset; // runtime generic context info
int32_t rgctxInfoCount;
int32_t monoStringOffset; // mono strings
int32_t monoStringCount;
int32_t methodMetadataOffset; // method metadata
int32_t methodMetadataCount;
int32_t genericArgumentIndicesOffset; // generic argument indices
int32_t genericArgumentIndicesCount;
int32_t typeTableOffset; // type table
int32_t typeTableCount;
int32_t fieldTableOffset; // field table
int32_t fieldTableCount;
int32_t methodIndexTableOffset; // method index table
int32_t methodIndexTableCount;
int32_t genericMethodIndexTableOffset; // generic method index table
int32_t genericMethodIndexTableCount;
int32_t metaDataUsageListsTableOffset; // meta data usage lists table
int32_t metaDataUsageListsTableCount;
int32_t metaDataUsagePairsTableOffset; // meta data usage pairs table
int32_t metaDataUsagePairsTableCount;
int32_t assemblyNameTableOffset; // assembly names
int32_t assemblyNameTableCount;
};
#pragma pack(pop, p1)
#endif

View file

@ -0,0 +1,154 @@
#include "pch.h"
#pragma once
/*
* Field Attributes (21.1.5).
*/
#define FIELD_ATTRIBUTE_FIELD_ACCESS_MASK 0x0007
#define FIELD_ATTRIBUTE_COMPILER_CONTROLLED 0x0000
#define FIELD_ATTRIBUTE_PRIVATE 0x0001
#define FIELD_ATTRIBUTE_FAM_AND_ASSEM 0x0002
#define FIELD_ATTRIBUTE_ASSEMBLY 0x0003
#define FIELD_ATTRIBUTE_FAMILY 0x0004
#define FIELD_ATTRIBUTE_FAM_OR_ASSEM 0x0005
#define FIELD_ATTRIBUTE_PUBLIC 0x0006
#define FIELD_ATTRIBUTE_STATIC 0x0010
#define FIELD_ATTRIBUTE_INIT_ONLY 0x0020
#define FIELD_ATTRIBUTE_LITERAL 0x0040
#define FIELD_ATTRIBUTE_NOT_SERIALIZED 0x0080
#define FIELD_ATTRIBUTE_SPECIAL_NAME 0x0200
#define FIELD_ATTRIBUTE_PINVOKE_IMPL 0x2000
/* For runtime use only */
#define FIELD_ATTRIBUTE_RESERVED_MASK 0x9500
#define FIELD_ATTRIBUTE_RT_SPECIAL_NAME 0x0400
#define FIELD_ATTRIBUTE_HAS_FIELD_MARSHAL 0x1000
#define FIELD_ATTRIBUTE_HAS_DEFAULT 0x8000
#define FIELD_ATTRIBUTE_HAS_FIELD_RVA 0x0100
/*
* Method Attributes (22.1.9)
*/
#define METHOD_IMPL_ATTRIBUTE_CODE_TYPE_MASK 0x0003
#define METHOD_IMPL_ATTRIBUTE_IL 0x0000
#define METHOD_IMPL_ATTRIBUTE_NATIVE 0x0001
#define METHOD_IMPL_ATTRIBUTE_OPTIL 0x0002
#define METHOD_IMPL_ATTRIBUTE_RUNTIME 0x0003
#define METHOD_IMPL_ATTRIBUTE_MANAGED_MASK 0x0004
#define METHOD_IMPL_ATTRIBUTE_UNMANAGED 0x0004
#define METHOD_IMPL_ATTRIBUTE_MANAGED 0x0000
#define METHOD_IMPL_ATTRIBUTE_FORWARD_REF 0x0010
#define METHOD_IMPL_ATTRIBUTE_PRESERVE_SIG 0x0080
#define METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL 0x1000
#define METHOD_IMPL_ATTRIBUTE_SYNCHRONIZED 0x0020
#define METHOD_IMPL_ATTRIBUTE_NOINLINING 0x0008
#define METHOD_IMPL_ATTRIBUTE_MAX_METHOD_IMPL_VAL 0xffff
#define METHOD_ATTRIBUTE_MEMBER_ACCESS_MASK 0x0007
#define METHOD_ATTRIBUTE_COMPILER_CONTROLLED 0x0000
#define METHOD_ATTRIBUTE_PRIVATE 0x0001
#define METHOD_ATTRIBUTE_FAM_AND_ASSEM 0x0002
#define METHOD_ATTRIBUTE_ASSEM 0x0003
#define METHOD_ATTRIBUTE_FAMILY 0x0004
#define METHOD_ATTRIBUTE_FAM_OR_ASSEM 0x0005
#define METHOD_ATTRIBUTE_PUBLIC 0x0006
#define METHOD_ATTRIBUTE_STATIC 0x0010
#define METHOD_ATTRIBUTE_FINAL 0x0020
#define METHOD_ATTRIBUTE_VIRTUAL 0x0040
#define METHOD_ATTRIBUTE_HIDE_BY_SIG 0x0080
#define METHOD_ATTRIBUTE_VTABLE_LAYOUT_MASK 0x0100
#define METHOD_ATTRIBUTE_REUSE_SLOT 0x0000
#define METHOD_ATTRIBUTE_NEW_SLOT 0x0100
#define METHOD_ATTRIBUTE_STRICT 0x0200
#define METHOD_ATTRIBUTE_ABSTRACT 0x0400
#define METHOD_ATTRIBUTE_SPECIAL_NAME 0x0800
#define METHOD_ATTRIBUTE_PINVOKE_IMPL 0x2000
#define METHOD_ATTRIBUTE_UNMANAGED_EXPORT 0x0008
/*
* For runtime use only
*/
#define METHOD_ATTRIBUTE_RESERVED_MASK 0xd000
#define METHOD_ATTRIBUTE_RT_SPECIAL_NAME 0x1000
#define METHOD_ATTRIBUTE_HAS_SECURITY 0x4000
#define METHOD_ATTRIBUTE_REQUIRE_SEC_OBJECT 0x8000
/*
* Type Attributes (21.1.13).
*/
#define TYPE_ATTRIBUTE_VISIBILITY_MASK 0x00000007
#define TYPE_ATTRIBUTE_NOT_PUBLIC 0x00000000
#define TYPE_ATTRIBUTE_PUBLIC 0x00000001
#define TYPE_ATTRIBUTE_NESTED_PUBLIC 0x00000002
#define TYPE_ATTRIBUTE_NESTED_PRIVATE 0x00000003
#define TYPE_ATTRIBUTE_NESTED_FAMILY 0x00000004
#define TYPE_ATTRIBUTE_NESTED_ASSEMBLY 0x00000005
#define TYPE_ATTRIBUTE_NESTED_FAM_AND_ASSEM 0x00000006
#define TYPE_ATTRIBUTE_NESTED_FAM_OR_ASSEM 0x00000007
#define TYPE_ATTRIBUTE_LAYOUT_MASK 0x00000018
#define TYPE_ATTRIBUTE_AUTO_LAYOUT 0x00000000
#define TYPE_ATTRIBUTE_SEQUENTIAL_LAYOUT 0x00000008
#define TYPE_ATTRIBUTE_EXPLICIT_LAYOUT 0x00000010
#define TYPE_ATTRIBUTE_CLASS_SEMANTIC_MASK 0x00000020
#define TYPE_ATTRIBUTE_CLASS 0x00000000
#define TYPE_ATTRIBUTE_INTERFACE 0x00000020
#define TYPE_ATTRIBUTE_ABSTRACT 0x00000080
#define TYPE_ATTRIBUTE_SEALED 0x00000100
#define TYPE_ATTRIBUTE_SPECIAL_NAME 0x00000400
#define TYPE_ATTRIBUTE_IMPORT 0x00001000
#define TYPE_ATTRIBUTE_SERIALIZABLE 0x00002000
#define TYPE_ATTRIBUTE_STRING_FORMAT_MASK 0x00030000
#define TYPE_ATTRIBUTE_ANSI_CLASS 0x00000000
#define TYPE_ATTRIBUTE_UNICODE_CLASS 0x00010000
#define TYPE_ATTRIBUTE_AUTO_CLASS 0x00020000
#define TYPE_ATTRIBUTE_BEFORE_FIELD_INIT 0x00100000
#define TYPE_ATTRIBUTE_FORWARDER 0x00200000
#define TYPE_ATTRIBUTE_RESERVED_MASK 0x00040800
#define TYPE_ATTRIBUTE_RT_SPECIAL_NAME 0x00000800
#define TYPE_ATTRIBUTE_HAS_SECURITY 0x00040000
/*
* Flags for Params (22.1.12)
*/
#define PARAM_ATTRIBUTE_IN 0x0001
#define PARAM_ATTRIBUTE_OUT 0x0002
#define PARAM_ATTRIBUTE_OPTIONAL 0x0010
#define PARAM_ATTRIBUTE_RESERVED_MASK 0xf000
#define PARAM_ATTRIBUTE_HAS_DEFAULT 0x1000
#define PARAM_ATTRIBUTE_HAS_FIELD_MARSHAL 0x2000
#define PARAM_ATTRIBUTE_UNUSED 0xcfe0
// Flags for Generic Parameters (II.23.1.7)
#define GENERIC_PARAMETER_ATTRIBUTE_NON_VARIANT 0x00
#define GENERIC_PARAMETER_ATTRIBUTE_COVARIANT 0x01
#define GENERIC_PARAMETER_ATTRIBUTE_CONTRAVARIANT 0x02
#define GENERIC_PARAMETER_ATTRIBUTE_VARIANCE_MASK 0x03
#define GENERIC_PARAMETER_ATTRIBUTE_REFERENCE_TYPE_CONSTRAINT 0x04
#define GENERIC_PARAMETER_ATTRIBUTE_NOT_NULLABLE_VALUE_TYPE_CONSTRAINT 0x08
#define GENERIC_PARAMETER_ATTRIBUTE_DEFAULT_CONSTRUCTOR_CONSTRAINT 0x10
#define GENERIC_PARAMETER_ATTRIBUTE_SPECIAL_CONSTRAINT_MASK 0x1C
/**
* 21.5 AssemblyRefs
*/
#define ASSEMBLYREF_FULL_PUBLIC_KEY_FLAG 0x00000001
#define ASSEMBLYREF_RETARGETABLE_FLAG 0x00000100
#define ASSEMBLYREF_ENABLEJITCOMPILE_TRACKING_FLAG 0x00008000
#define ASSEMBLYREF_DISABLEJITCOMPILE_OPTIMIZER_FLAG 0x00004000

9
LICENSE Normal file
View file

@ -0,0 +1,9 @@
MIT License
Copyright (c) 2025 ProjectEclipse
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

74
ProtoGen/ProtoCache.cpp Normal file
View file

@ -0,0 +1,74 @@
#include "ProtoCache.h"
#include "ProtoMetadata.h"
TypeCache TypeCache::init() {
TypeCache cache;
auto corlib = Il2CppApi::AssemblyGetImage(Il2CppApi::DomainAssemblyOpen("mscorlib.dll"));
auto assembly = Il2CppApi::AssemblyGetImage(Il2CppApi::DomainAssemblyOpen("Assembly-CSharp.dll"));
cache.type_map = std::map<std::size_t, CachedType> {
{
reinterpret_cast<std::size_t>(Il2CppApi::ClassFromName(corlib, "System", "Object")),
Object,
},
{
reinterpret_cast<std::size_t>(Il2CppApi::ClassFromName(corlib, "System", "Boolean")),
Boolean,
},
{
reinterpret_cast<std::size_t>(Il2CppApi::ClassFromName(corlib, "System", "Byte")),
Byte,
},
{
reinterpret_cast<std::size_t>(Il2CppApi::ClassFromName(corlib, "System", "SByte")),
SByte,
},
{
reinterpret_cast<std::size_t>(Il2CppApi::ClassFromName(corlib, "System", "UInt16")),
UInt16,
},
{
reinterpret_cast<std::size_t>(Il2CppApi::ClassFromName(corlib, "System", "Int16")),
Int16,
},
{
reinterpret_cast<std::size_t>(Il2CppApi::ClassFromName(corlib, "System", "UInt32")),
UInt32,
},
{
reinterpret_cast<std::size_t>(Il2CppApi::ClassFromName(corlib, "System", "Int32")),
Int32,
},
{
reinterpret_cast<std::size_t>(Il2CppApi::ClassFromName(corlib, "System", "UInt64")),
UInt64,
},
{
reinterpret_cast<std::size_t>(Il2CppApi::ClassFromName(corlib, "System", "Int64")),
Int64,
},
{
reinterpret_cast<std::size_t>(Il2CppApi::ClassFromName(corlib, "System", "Single")),
Single,
},
{
reinterpret_cast<std::size_t>(Il2CppApi::ClassFromName(corlib, "System", "Double")),
Double,
},
{
reinterpret_cast<std::size_t>(Il2CppApi::ClassFromName(corlib, "System", "String")),
String,
},
{
reinterpret_cast<std::size_t>(Il2CppApi::ClassFromName(corlib, "System", "Enum")),
Enum,
},
{
reinterpret_cast<std::size_t>(Il2CppApi::ClassFromName(assembly, "", BYTE_STRING)),
ByteString,
},
};
return cache;
}

28
ProtoGen/ProtoCache.h Normal file
View file

@ -0,0 +1,28 @@
#pragma once
#include "Il2CppApi.h"
#include <map>
enum CachedType{
Object,
Boolean,
Byte,
SByte,
UInt16,
Int16,
UInt32,
Int32,
UInt64,
Int64,
Single,
Double,
String,
ByteString,
Any,
Enum,
};
struct TypeCache {
std::map<std::size_t, CachedType> type_map;
static TypeCache init();
};

376
ProtoGen/ProtoMetadata.cpp Normal file
View file

@ -0,0 +1,376 @@
// #include <z3++.h>
#include <chrono>
#include "ProtoMetadata.h"
const std::vector<int> wire_types = {WIRE_TYPE_VAR_INT, WIRE_TYPE_LENGTH_PREFIXED, WIRE_TYPE_I32, WIRE_TYPE_I64};
std::string ProtoMetadata::DumpProto(Il2CppClass* klass) {
void* iter;
std::stringstream outPut;
TypeCache type_cache = TypeCache::init();
std::map<size_t, MessageMinimalInfo> minimal_info_map;
auto get_cmd_id = Il2CppApi::ClassGetMethodFromName(klass, GET_CMD_ID, 0);
if (!get_cmd_id) return {};
Il2CppObject* proto_instance = Il2CppApi::ObjectNew(klass);
Il2CppApi::MethodInvoke(Il2CppApi::ClassGetMethodFromName(klass, ".ctor", 0), proto_instance, nullptr);
Il2CppObject* cmd_id_boxed = Il2CppApi::MethodInvoke(get_cmd_id, proto_instance, nullptr);
auto cmd_id = *reinterpret_cast<const uint16_t*>(Il2CppApi::ObjectUnbox(cmd_id_boxed));
MessageMinimalInfo message_info(cmd_id);
Bruteforcer bruteforcer(type_cache, proto_instance);
for (int field_id = 1; field_id < 4096; ++field_id) {
bool detected = false;
for (int wire_type : wire_types) {
uint32_t tag = pack_wire_tag(field_id, wire_type);
auto input_result = bruteforcer.input(tag);
if (input_result.has_value()) {
const FieldDetectionInfo& info = input_result.value();
message_info.fields.emplace_back(FieldMinimalInfo{
0,
info.offset,
tag,
info.oneof_extra_data
});
detected = true;
break; // salir de wire_types para este field_id
}
}
if (detected) continue;
}
if (Il2CppApi::ClassIsEnum(Il2CppApi::ClassGetParent(klass))) {
std::cout << "Class is enum so we have to do a different thing" << std::endl;
std::string enum_name = Il2CppApi::ClassGetName(klass);
std::vector<std::pair<std::string, int32_t>> variants;
iter = nullptr;
while(auto field = Il2CppApi::ClassGetFields(klass, &iter)) {
std::cout << "Casting field to an IL2CPPField*" << std::endl;
auto value = Il2CppApi::FieldStaticGetValue(field);
std::cout << "Obtaining Field name from field" << std::endl;
auto name = Il2CppApi::FieldGetName(field);
if (!Il2CppApi::FieldIsInstance(field) && value == 0) {
std::cout << "Field with static_get_value == 0" << std::endl;
variants.emplace_back(enum_name + "_" + name, static_cast<int32_t>(value));
}
}
iter = nullptr;
while(auto field = Il2CppApi::ClassGetFields(klass, &iter)) {
std::cout << "Casting field to an IL2CPPField* 2" << std::endl;
auto value = Il2CppApi::FieldStaticGetValue(field);
std::cout << "Obtaining Field name from field 2" << std::endl;
auto name = Il2CppApi::FieldGetName(field);
if (!Il2CppApi::FieldIsInstance(field) && value != 0) {
std::cout << "Field with static_get_value != 0" << std::endl;
variants.emplace_back(enum_name + "_" + name, static_cast<int32_t>(value));
}
}
std::cout << "Emplacing the item" << std::endl;
proto::Enum enumItem = proto::Enum{
enum_name,
std::move(variants)
};
outPut << enumItem;
}
else {
std::vector<std::pair<size_t, proto::Field>> fields;
for (auto field_info : message_info.fields) {
if (field_info.oneof_extra_data.has_value()) continue;
uintptr_t* matching_field = nullptr;
iter = nullptr;
while (auto field = Il2CppApi::ClassGetFields(klass, &iter)) {
auto offset = Il2CppApi::FieldGetOffset(field);
if (Il2CppApi::FieldIsInstance(field) && offset == field_info.offset) {
matching_field = field;
break;
}
}
if (matching_field == nullptr) {
continue;
}
fields.push_back(std::make_pair(
Il2CppApi::FieldGetToken(matching_field),
proto::Field{
ProtoMetadata::CsharpTypeToProtobufType(type_cache, Il2CppApi::FieldGetType(matching_field)),
std::string(Il2CppApi::FieldGetName(matching_field)),
field_info.tag >> 3,
proto::FieldComment{
Il2CppApi::FieldGetOffset(matching_field),
field_info.xor_
}
}
));
}
std::sort(fields.begin(), fields.end(), [](const auto& a, const auto& b) { return a.first < b.first; });
std::vector<proto::Oneof> oneofs;
// Procesar campos que sí tienen oneof_extra_data
for (auto field_info : message_info.fields) {
if (!field_info.oneof_extra_data.has_value()) continue;
auto oneof_data = field_info.oneof_extra_data.value();
uintptr_t* oneof_data_field = nullptr;
iter = nullptr;
while(auto f = Il2CppApi::ClassGetFields(klass, &iter)) {
auto offset = Il2CppApi::FieldGetOffset(f);
if (Il2CppApi::FieldIsInstance(f) && offset == field_info.offset) {
oneof_data_field = f;
break;
}
}
if (!oneof_data_field) continue;
uintptr_t* oneof_enum_field = nullptr;
iter = nullptr;
while(auto f = Il2CppApi::ClassGetFields(klass, &iter)) {
auto offset = Il2CppApi::FieldGetOffset(f);
if (Il2CppApi::FieldIsInstance(f) && offset == oneof_data.oneof_enum_offset) {
oneof_enum_field = f;
break;
}
}
if (!oneof_enum_field) continue;
Il2CppClass* oneof_enum = Il2CppApi::FromIl2CppType(Il2CppApi::FieldGetType(oneof_enum_field));
uintptr_t* oneof_case_enum_field = nullptr;
iter = nullptr;
while(auto f = Il2CppApi::ClassGetFields(oneof_enum, &iter)) {
auto value = Il2CppApi::FieldStaticGetValue(f);
if (!Il2CppApi::FieldIsInstance(f) && value == (field_info.tag >> 3)) {
oneof_case_enum_field = f;
break;
}
}
if (!oneof_case_enum_field) continue;
// Buscar o crear Oneof en vector oneofs
proto::Oneof* oneof_ptr = nullptr;
for (auto& o : oneofs) {
auto fieldName = Il2CppApi::FieldGetName(oneof_data_field);
if (o.name == fieldName) {
oneof_ptr = &o;
break;
}
}
if (!oneof_ptr) {
oneofs.emplace_back(proto::Oneof{std::string(Il2CppApi::FieldGetName(oneof_data_field)), {}});
oneof_ptr = &oneofs.back();
}
// Añadir Field al Oneof
oneof_ptr->fields.emplace_back(proto::Field{
ProtoMetadata::CsharpTypeToProtobufType(type_cache, oneof_data.variant_type),
Il2CppApi::FieldGetName(oneof_case_enum_field),
field_info.tag >> 3,
std::nullopt
});
}
// Construir Message y agregar a proto_file
std::vector<proto::Field> extractedFields;
for (const auto& p : fields) {
extractedFields.push_back(p.second);
}
proto::Message messageItem {
message_info.cmd_id,
Il2CppApi::ClassGetName(klass),
std::move(extractedFields),
std::move(oneofs),
};
outPut << messageItem;
}
return outPut.str();
}
// Constructor bruteforcer con cálculo directo del field_number
Bruteforcer::Bruteforcer(TypeCache type_cache, Il2CppObject* obj) : object(obj) {
Il2CppClass* klass = Il2CppApi::ObjectGetClass(obj);
void* iter = nullptr;
while (auto field = Il2CppApi::ClassGetFields(klass, &iter)) {
size_t offset = Il2CppApi::FieldGetOffset(field);
auto type = Il2CppApi::FieldGetType(field);
Il2CppClass* field_class = Il2CppApi::FromIl2CppType(type);
const char* type_name = Il2CppApi::ClassGetName(field_class);
int wire_type = -1;
if (strcmp(type_name, "Int32") == 0 ||
strcmp(type_name, "UInt32") == 0 ||
strcmp(type_name, "Int64") == 0 ||
strcmp(type_name, "UInt64") == 0 ||
strcmp(type_name, "Boolean") == 0 ||
strcmp(type_name, "Enum") == 0)
{
// En Protobuf: int32, int64, uint32, uint64, bool, enum → varint
wire_type = 0;
}
else if (strcmp(type_name, "String") == 0 ||
strcmp(type_name, "Object") == 0 ||
strcmp(type_name, "Byte[]") == 0)
{
// string, bytes, objetos serializados → length-delimited
wire_type = 2;
}
else if (strcmp(type_name, "Single") == 0 ||
strcmp(type_name, "Fixed32") == 0 ||
strcmp(type_name, "SFixed32") == 0)
{
// float, fixed32, sfixed32 → 32-bit
wire_type = 5;
}
else if (strcmp(type_name, "Double") == 0 ||
strcmp(type_name, "Fixed64") == 0 ||
strcmp(type_name, "SFixed64") == 0)
{
// double, fixed64, sfixed64 → 64-bit
wire_type = 1;
}
bool is_enum = Il2CppApi::ClassIsEnum(field_class);
bool is_object = (strcmp(type_name, "Object") == 0 || strcmp(type_name, "String") == 0);
// Aquí no secuencias field_number, lo calculas con la función dedicada después
cached_fields.push_back(CachedFieldInfo{
-1, // field_number aún no calculado
wire_type,
offset,
is_enum,
is_object
});
}
}
// Método directo que calcula field_number del wire_tag con formula protobuf
std::optional<int> Bruteforcer::build_field_number(uint32_t wire_tag) {
int field_number = wire_tag >> 3;
if (field_number >= 1 && field_number <= 4095) {
return field_number;
}
return std::nullopt;
}
// Función input usa cálculo directo y consulta cached_fields
std::optional<FieldDetectionInfo> Bruteforcer::input(uint32_t wire_tag) {
auto maybe_field_number = build_field_number(wire_tag);
if (!maybe_field_number.has_value()) return std::nullopt;
int field_number = maybe_field_number.value();
int wire_type = wire_tag & 0x07;
for (auto& f : cached_fields) {
if (f.wire_type == wire_type) {
// Ahora consideramos cualquier field_number que coincida con el calculado
// y asociamos el field_number a cached_fields así:
if (f.field_number == -1) {
f.field_number = field_number; // asignar el valor deducido
}
if (f.field_number == field_number) {
bool is_obj = false, is_enum = false;
for (const auto& ff : cached_fields) {
if (ff.offset == f.offset && ff.is_object) is_obj = true;
if (ff.is_enum) is_enum = true;
}
if (is_obj && is_enum) {
return build_field_oneof(wire_tag);
}
return FieldDetectionInfo{
f.offset,
std::nullopt
};
}
}
}
return std::nullopt;
}
std::optional<FieldDetectionInfo> Bruteforcer::build_field_oneof(uint32_t wire_tag) {
auto maybe_field_number = build_field_number(wire_tag);
if (!maybe_field_number.has_value()) return std::nullopt;
int field_number = maybe_field_number.value();
int wire_type = wire_tag & 0x07;
for (auto& f : cached_fields) {
// Considera solo campos con wire_type igual, y que tengan el mismo field_number o no asignado aún (-1)
if (f.wire_type == wire_type && (f.field_number == field_number || f.field_number == -1)) {
// Recolectar campos que compartan offset y sean objeto o enum
std::vector<const CachedFieldInfo*> candidates;
for (const auto& ff : cached_fields) {
if (ff.offset == f.offset && (ff.is_object || ff.is_enum)) {
candidates.push_back(&ff);
}
}
// Un campo oneof típico tiene exactamente dos candidatos: uno objeto, uno enum
if (candidates.size() == 2) {
const CachedFieldInfo* data_field = candidates[0];
const CachedFieldInfo* enum_field = candidates[1];
// Corregir si están invertidos (enum y objeto)
if (enum_field->is_enum && data_field->is_object) {
// Correcto orden
} else if (data_field->is_enum && enum_field->is_object) {
std::swap(data_field, enum_field);
} else {
// No es combinación válida enum-objeto
return std::nullopt;
}
// Usar Il2CppApi para obtener Il2CppType* del campo de datos
// Aquí hay que convertir correctamente el 'field' de la cache a tipo
// Asumo que tienes alguna forma de obtener Il2CppType* desde CachedFieldInfo->offset
// Si no, adapta según tu API
Il2CppClass* klass = Il2CppApi::ObjectGetClass(object);
Il2CppType* data_type = nullptr;
// Buscar campo en klass por offset para obtener tipo
void* iter = nullptr;
while (auto field = Il2CppApi::ClassGetFields(klass, &iter)) {
auto offset = Il2CppApi::FieldGetOffset(field);
if (offset == data_field->offset) {
data_type = const_cast<Il2CppType*>(Il2CppApi::FieldGetType(field));
break;
}
}
if (!data_type) {
// No se pudo obtener tipo, abortar
return std::nullopt;
}
return FieldDetectionInfo{
data_field->offset,
std::optional<OneofVariantInfo>{
OneofVariantInfo{
enum_field->offset,
data_type
}
}
};
}
}
}
return std::nullopt;
}
std::string ProtoMetadata::CsharpTypeToProtobufType(const TypeCache& cache, const Il2CppType* ty) {
if (!ty) return "unknown";
// 🔎 comprobar si es genérico
if (ty->type == IL2CPP_TYPE_GENERICINST) {
Il2CppClass* klass = Il2CppApi::FromIl2CppType(ty);
int gen_count = Il2CppApi::ClassGetGenericArgCount(klass);
if (gen_count == 1) {
auto generic_type = reinterpret_cast<const Il2CppType*>(Il2CppApi::ClassGetGenericArgType(klass, 0));
return "repeated " + CsharpTypeToProtobufType(cache, generic_type);
} else if (gen_count == 2) {
auto generic_type1 = reinterpret_cast<const Il2CppType*>(Il2CppApi::ClassGetGenericArgType(klass, 0));
auto generic_type2 = reinterpret_cast<const Il2CppType*>(Il2CppApi::ClassGetGenericArgType(klass, 1));
return "map<"
+ CsharpTypeToProtobufType(cache, generic_type1) + ", "
+ CsharpTypeToProtobufType(cache, generic_type2) + ">";
}
}
// 🔎 tipos básicos: mirar en type_cache
Il2CppClass* klass = Il2CppApi::FromIl2CppType(ty);
auto ptr = reinterpret_cast<std::size_t>(klass);
auto it = cache.type_map.find(ptr);
if (it != cache.type_map.end()) {
switch (it->second) {
case CachedType::Boolean: return "bool";
case CachedType::Int32: return "int32";
case CachedType::UInt32: return "uint32";
case CachedType::Int64: return "int64";
case CachedType::UInt64: return "uint64";
case CachedType::Single: return "float";
case CachedType::Double: return "double";
case CachedType::String: return "string";
case CachedType::ByteString: return "bytes";
case CachedType::Any: return "google.protobuf.Any";
default: throw std::runtime_error("unreachable CachedType");
}
}
// 🔎 si no es básico ni genérico → es tipo definido por el usuario
return Il2CppApi::ClassGetName(klass);
}

80
ProtoGen/ProtoMetadata.h Normal file
View file

@ -0,0 +1,80 @@
#pragma once
#include <vector>
#include <cstdint>
#include <algorithm>
#include <map>
#include <optional>
#include "Il2CppHelper.h"
#include "ProtoUtil.h"
#include "ProtoCache.h"
#include "ProtoOutput.h"
// Constantes equivalentes a cadenas estáticas de Rust
constexpr const char* CODED_INPUT_STREAM = "CELNCCLEKFP";
constexpr const char* MERGE_FROM = "MMANOOLJPGC";
constexpr const char* GET_CMD_ID = "PIGAAPNKIGC";
constexpr const char* PROTO_CLASS = "KKAGGNDBDHE";
constexpr const char* BYTE_STRING = "HIHGFFMNNDN";
struct CachedFieldInfo {
int field_number;
int wire_type;
size_t offset;
bool is_enum;
bool is_object;
};
// Equivalente a OneofVariantInfo
struct OneofVariantInfo {
size_t oneof_enum_offset;
const Il2CppType* variant_type;
};
// Equivalente a FieldMinimalInfo
struct FieldMinimalInfo {
uint32_t xor_;
size_t offset;
uint32_t tag;
std::optional<OneofVariantInfo> oneof_extra_data;
};
// Equivalente a MessageMinimalInfo
struct MessageMinimalInfo {
uint16_t cmd_id;
std::vector<FieldMinimalInfo> fields;
MessageMinimalInfo(uint16_t cmd_id_) : cmd_id(cmd_id_) {}
};
// Equivalente a FieldDetectionInfo
struct FieldDetectionInfo {
size_t offset;
std::optional<OneofVariantInfo> oneof_extra_data;
};
class Bruteforcer {
public:
Il2CppObject* object;
const uint8_t* merge_from_method;
std::vector<CachedFieldInfo> cached_fields;
// Constructor
Bruteforcer(TypeCache type_cache, Il2CppObject* obj);
// Método input
std::optional<FieldDetectionInfo> input(uint32_t wire_tag);
private:
std::optional<int> build_field_number(uint32_t wire_tag);
std::optional<FieldDetectionInfo> build_field_oneof(uint32_t wire_tag);
};
class ProtoMetadata {
public:
static std::string DumpProto(Il2CppClass* klass);
static Il2CppObject* CreateInputStream(const std::vector<uint8_t>& buf);
private:
static std::string CsharpTypeToProtobufType(const TypeCache& cache, const Il2CppType* ty);
};

74
ProtoGen/ProtoOutput.cpp Normal file
View file

@ -0,0 +1,74 @@
#include "ProtoOutput.h"
using namespace proto;
std::ostream& proto::operator<<(std::ostream& os, const FieldComment& c) {
os << " // offset: " << c.offset << ", xor const: " << c.xor_const;
return os;
}
std::ostream& proto::operator<<(std::ostream& os, const Field& f) {
os << " " << f.kind << " " << f.name << " = " << f.number << ";";
if (f.comment) {
os << *(f.comment);
}
return os;
}
std::ostream& proto::operator<<(std::ostream& os, const Oneof& o) {
os << " oneof " << o.name << " {\n";
for (const auto& field : o.fields) {
os << " " << field << "\n";
}
os << " }";
return os;
}
std::ostream& proto::operator<<(std::ostream& os, const Enum& e) {
os << "enum " << e.name << " {\n";
for (const auto& [name, value] : e.variants) {
os << " " << name << " = " << value << ";\n";
}
os << "}\n";
return os;
}
std::ostream& proto::operator<<(std::ostream& os, const Message& m) {
os << "message " << m.name << " {";
if (m.cmd_id != 0) {
os << " // CmdID: " << m.cmd_id;
}
os << "\n";
for (const auto& field : m.fields) {
os << field << "\n";
}
for (const auto& oneof : m.oneofs) {
os << oneof << "\n";
}
os << "}\n\n";
return os;
}
std::ostream& proto::operator<<(std::ostream& os, const ProtoItem& item) {
if (std::holds_alternative<Message>(item)) {
os << std::get<Message>(item);
} else if (std::holds_alternative<Enum>(item)) {
os << std::get<Enum>(item);
}
return os;
}
std::ostream& proto::operator<<(std::ostream& os, const ProtoFile& pf) {
os << "syntax = \"" << pf.syntax << "\";\n";
for (const auto& import : pf.imports) {
os << "import \"" << import << "\";\n";
}
os << "\n";
for (const auto& item : pf.items) {
os << item;
}
return os;
}

58
ProtoGen/ProtoOutput.h Normal file
View file

@ -0,0 +1,58 @@
#pragma once
#include <cstdint>
#include <iostream>
#include <string>
#include <vector>
#include <optional>
#include <variant>
// Declaraciones de estructuras
namespace proto {
struct FieldComment {
size_t offset;
uint32_t xor_const;
};
struct Field {
std::string kind;
std::string name;
uint32_t number;
std::optional<FieldComment> comment;
};
struct Oneof {
std::string name;
std::vector<Field> fields;
};
struct Enum {
std::string name;
std::vector<std::pair<std::string, int32_t>> variants;
};
struct Message {
uint16_t cmd_id;
std::string name;
std::vector<Field> fields;
std::vector<Oneof> oneofs;
};
using ProtoItem = std::variant<Message, Enum>;
struct ProtoFile {
std::string syntax;
std::vector<std::string> imports;
std::vector<ProtoItem> items;
};
// Declaración de operadores de salida
std::ostream& operator<<(std::ostream& os, const FieldComment& c);
std::ostream& operator<<(std::ostream& os, const Field& f);
std::ostream& operator<<(std::ostream& os, const Oneof& o);
std::ostream& operator<<(std::ostream& os, const Enum& e);
std::ostream& operator<<(std::ostream& os, const Message& m);
std::ostream& operator<<(std::ostream& os, const ProtoItem& item);
std::ostream& operator<<(std::ostream& os, const ProtoFile& pf);
}

32
ProtoGen/ProtoUtil.cpp Normal file
View file

@ -0,0 +1,32 @@
#include "ProtoUtil.h"
size_t varint_length(uint32_t v) {
if (v == 0) return 1;
size_t logcounter = 0;
while (v > 0) {
++logcounter;
v >>= 7;
}
return logcounter;
}
size_t encode_varint(std::vector<uint8_t>& dst, uint32_t value) {
constexpr uint8_t MSB = 0b10000000;
uint32_t n = value;
size_t i = 0;
while (n >= 0x80) {
dst.push_back(MSB | static_cast<uint8_t>(n & 0x7F));
++i;
n >>= 7;
}
dst.push_back(static_cast<uint8_t>(n));
return i + 1;
}
uint32_t pack_wire_tag(uint32_t field_id, uint8_t wire_type) {
return (field_id << 3) | static_cast<uint32_t>(wire_type);
}

32
ProtoGen/ProtoUtil.h Normal file
View file

@ -0,0 +1,32 @@
#pragma once
#include <vector>
#include <cstdint>
const uint8_t bytes_i32[4] = {0, 0, 0, 1};
const uint8_t bytes_i64[8] = {0, 0, 0, 0, 0, 0, 0, 1};
const std::vector<uint8_t> VECTOR_ONE = {1};
const std::vector<uint8_t> VECTOR_ZERO = {0};
const std::vector<uint8_t> VECTOR_COLLECTION = {1, 0};
const std::vector<std::vector<uint8_t>> LENGTH_PREFIXED_SAMPLES = {
{1, 0, 0, 0, 0},
{1, 0, 0, 0, 0, 0, 0, 0, 0},
{5, 0x08, 0x01, 0x33, 0x01, 0x00},
{5, 0x10, 0x01, 0x33, 0x10, 0x00},
};
const std::vector<uint8_t> LENGTH_I32 = {bytes_i32, bytes_i32 + 4};
const std::vector<uint8_t> LENGTH_I64 = {bytes_i64, bytes_i64 + 8};
// Constantes wire types
constexpr uint8_t WIRE_TYPE_VAR_INT = 0;
constexpr uint8_t WIRE_TYPE_I64 = 1;
constexpr uint8_t WIRE_TYPE_LENGTH_PREFIXED = 2;
constexpr uint8_t WIRE_TYPE_I32 = 5;
// Prototipos de funciones
size_t varint_length(uint32_t v);
size_t encode_varint(std::vector<uint8_t>& dst, uint32_t value);
uint32_t pack_wire_tag(uint32_t field_id, uint8_t wire_type);

35
README.md Normal file
View file

@ -0,0 +1,35 @@
# EclipseeDumper
A PoC Dumper made for a specific anime game for educational purposes
## Supported Versions
- [x] OSREL5.6 (nah)
- [x] OSREL5.7
## Usage
Compile the project then inject it with your favorite injector wait until login screen shows up then press enter key ( DO NOT PRESS ENTER BEFORE THAT IF YOU DO SO IT WILL CRASH )
## Features
- [x] C# Definitions
- [x] Script.json (for applying names in ida) [#1](https://github.com/Yoshk4e/EclipseeDumper/issues/1)
- [ ] ~ProtoBuf (Under construction)( me so skill issue so won't be any time soon )~
## Need help?
- You can open an issue
## Contributing
Contributions are welcome, You can Submit a Pull request i'll review it and decide wether i should merge it to upstream or not
## Refrences I used to read while writing this software
- [Rumi's Blog](https://blog.rumi.dev/blog/genshin-runtime-dump)
- [xeonDev zzz GracefulDumper](https://github.com/thexeondev/GracefulDumper)
- [djKaty WriteUps](https://katyscode.wordpress.com/2020/06/24/il2cpp-part-1/) Note: this isn't the only one
- [Il2Cpp Source](https://github.com/MlgmXyysd/libil2cpp)
## License
This project is licensed under the [MIT](LICENSE) license

5
Resources/framework.h Normal file
View file

@ -0,0 +1,5 @@
#pragma once
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
// Windows Header Files
#include <windows.h>

5
Resources/pch.cpp Normal file
View file

@ -0,0 +1,5 @@
// pch.cpp: source file corresponding to the pre-compiled header
#include "pch.h"
// When you are using pre-compiled headers, this source file is necessary for compilation to succeed.

18
Resources/pch.h Normal file
View file

@ -0,0 +1,18 @@
#pragma once
#define WIN32_LEAN_AND_MEAN
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <Windows.h>
#include <cstdint>
#include <thread>
#include <filesystem>
#include <fstream>
#include <sstream>
#include <unordered_map>
#include <vector>
DWORD WINAPI MainThread(LPVOID lpReserved);

View file

@ -0,0 +1,41 @@
#include "pch.h"
#include "ProgressReporter.h"
#include <iostream>
#include <iomanip>
ProgressReporter::ProgressReporter(int totalItems, int barWidth)
: m_total(totalItems), m_width(barWidth),
m_lastDraw(std::chrono::steady_clock::now())
{
}
bool ProgressReporter::update(int currentIndex) {
// Compute percent
int percent = static_cast<int>(100.0 * currentIndex / (m_total - 1));
if (percent == m_lastPercent) {
// Throttle to ~30 FPS
auto now = std::chrono::steady_clock::now();
if (std::chrono::duration_cast<std::chrono::milliseconds>(now - m_lastDraw).count() < 33)
return false;
}
m_lastPercent = percent;
m_lastDraw = std::chrono::steady_clock::now();
// Build bar
int pos = m_width * percent / 100;
std::cout << "\r\33[2K[";
for (int i = 0; i < m_width; i++)
std::cout << (i <= pos ? '#' : ' ');
std::cout
<< "] " << std::fixed << std::setprecision(1)
<< percent << "% (" << currentIndex << "/" << (m_total - 1) << ")"
<< std::flush;
return true;
}
void ProgressReporter::finish() {
std::cout << "\n";
}

21
Utils/ProgressReporter.h Normal file
View file

@ -0,0 +1,21 @@
#pragma once
#include <string>
#include <chrono>
class ProgressReporter {
public:
ProgressReporter(int totalItems, int barWidth = 50);
/// Call every iteration with the current index (0-based).
/// Returns false if you should “throttle” (i.e. skip redraw).
bool update(int currentIndex);
/// Call once at the end to clear or finalize the line.
void finish();
private:
int m_total;
int m_width;
int m_lastPercent{ -1 };
std::chrono::steady_clock::time_point m_lastDraw;
};

126
Utils/ScriptJson.cpp Normal file
View file

@ -0,0 +1,126 @@
// https://github.com/thexeondev/GracefulDumper/blob/master/idapy-gen/src/lib.rs
#include "pch.h"
#include "scriptjson.h"
#include "Il2CppApi.h"
#include <sstream>
#include <vector>
using namespace std;
void ScriptJsonGenerator::WriteEscapedString(stringstream& ss, const string& value) {
for (char c : value) {
switch (c) {
case '"': ss << "\\\""; break;
case '\\': ss << "\\\\"; break;
case '\n': ss << "\\n"; break;
case '\r': ss << "\\r"; break;
case '\t': ss << "\\t"; break;
default: ss << c; break;
}
}
}
string ScriptJsonGenerator::GenerateJson() {
stringstream ss;
ss << "{";
// ScriptString (empty array)
ss << "\"ScriptString\":[],";
// ScriptMetadata
ss << "\"ScriptMetadata\":";
WriteTypeMetadata(ss);
ss << ",";
// ScriptMethod
ss << "\"ScriptMethod\":";
WriteMethods(ss);
ss << ",";
// ScriptMetadataMethod
ss << "\"ScriptMetadataMethod\":";
WriteMethodRefs(ss);
ss << "}";
return ss.str();
}
void ScriptJsonGenerator::WriteMethods(stringstream& ss) {
vector<string> entries;
ss << "[";
for (int index = 0; index <= 56983; ++index) {
if (Il2CppClass* klass = Il2CppApi::GetTypeInfoFromTypeDefinitionIndex(index)) {
void* methodIter = nullptr;
while (auto method = Il2CppApi::ClassGetMethods(klass, &methodIter)) {
stringstream entry;
entry << "{"
<< "\"Address\":" << ((*(uint64_t*)((char*)method + 8)) - il2CppOffsets::gIBaseAddress) << ","
<< "\"Name\":\"" << Il2CppApi::ClassGetName(klass) << "$$" << Il2CppApi::MethodGetName(method) << "\","
<< "\"Signature\":\"\","
<< "\"TypeSignature\":\"\""
<< "}";
entries.push_back(entry.str());
}
}
}
for (size_t i = 0; i < entries.size(); ++i) {
if (i > 0) ss << ",";
ss << entries[i];
}
ss << "]";
}
void ScriptJsonGenerator::WriteTypeMetadata(stringstream& ss) {
vector<string> entries;
ss << "[";
for (int index = 0; index <= 56983; ++index) {
if (Il2CppClass* klass = Il2CppApi::GetTypeInfoFromTypeDefinitionIndex(index)) {
stringstream entry;
entry << "{"
<< "\"Address\":" << (reinterpret_cast<uintptr_t>(klass) - il2CppOffsets::gIBaseAddress) << ","
<< "\"Name\":\"" << Il2CppApi::ClassGetName(klass) << "_TypeInfo\","
<< "\"Signature\":\"" << Il2CppApi::ClassGetName(klass) << "_c*\""
<< "}";
entries.push_back(entry.str());
}
}
for (size_t i = 0; i < entries.size(); ++i) {
if (i > 0) ss << ",";
ss << entries[i];
}
ss << "]";
}
void ScriptJsonGenerator::WriteMethodRefs(stringstream& ss) {
vector<string> entries;
ss << "[";
for (int index = 0; index <= 56983; ++index) {
if (Il2CppClass* klass = Il2CppApi::GetTypeInfoFromTypeDefinitionIndex(index)) {
void* methodIter = nullptr;
while (auto method = Il2CppApi::ClassGetMethods(klass, &methodIter)) {
stringstream entry;
entry << "{"
<< "\"Address\":" << (reinterpret_cast<uintptr_t>(method) - il2CppOffsets::gIBaseAddress) << ","
<< "\"Name\":\"" << Il2CppApi::ClassGetName(klass) << "_" << Il2CppApi::MethodGetName(method) << "\","
<< "\"MethodAddress\":" << (*(uint64_t*)((char*)method + 8) - il2CppOffsets::gIBaseAddress)
<< "}";
entries.push_back(entry.str());
}
}
}
for (size_t i = 0; i < entries.size(); ++i) {
if (i > 0) ss << ",";
ss << entries[i];
}
ss << "]";
}

15
Utils/ScriptJson.h Normal file
View file

@ -0,0 +1,15 @@
#pragma once
#include <string>
#include "Il2CppApi.h"
#include "Il2CppMetadata.h"
class ScriptJsonGenerator {
public:
static std::string GenerateJson();
private:
static void WriteEscapedString(std::stringstream& ss, const std::string& value);
static void WriteMethods(std::stringstream& ss);
static void WriteTypeMetadata(std::stringstream& ss);
static void WriteMethodRefs(std::stringstream& ss);
};

179
ZERO_CHECK.vcxproj Normal file
View file

@ -0,0 +1,179 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="17.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>
<PropertyGroup>
<ResolveNugetPackages>false</ResolveNugetPackages>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="MinSizeRel|x64">
<Configuration>MinSizeRel</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="RelWithDebInfo|x64">
<Configuration>RelWithDebInfo</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{E350C7EB-35F8-33BC-984B-A741D3851522}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0.26100.0</WindowsTargetPlatformVersion>
<Platform>x64</Platform>
<ProjectName>ZERO_CHECK</ProjectName>
<VCProjectUpgraderObjectName>NoUpgrade</VCProjectUpgraderObjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Utility</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Utility</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'" Label="Configuration">
<ConfigurationType>Utility</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'" Label="Configuration">
<ConfigurationType>Utility</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.20506.1</_ProjectFileVersion>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Midl>
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
<HeaderFileName>%(Filename).h</HeaderFileName>
<TypeLibraryName>%(Filename).tlb</TypeLibraryName>
<InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
</Midl>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Midl>
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
<HeaderFileName>%(Filename).h</HeaderFileName>
<TypeLibraryName>%(Filename).tlb</TypeLibraryName>
<InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
</Midl>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">
<Midl>
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
<HeaderFileName>%(Filename).h</HeaderFileName>
<TypeLibraryName>%(Filename).tlb</TypeLibraryName>
<InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
</Midl>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">
<Midl>
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<OutputDirectory>$(ProjectDir)/$(IntDir)</OutputDirectory>
<HeaderFileName>%(Filename).h</HeaderFileName>
<TypeLibraryName>%(Filename).tlb</TypeLibraryName>
<InterfaceIdentifierFileName>%(Filename)_i.c</InterfaceIdentifierFileName>
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
</Midl>
</ItemDefinitionGroup>
<ItemGroup>
<CustomBuild Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\82e1b2efbb7868df5f69a3b2cc1c0778\generate.stamp.rule">
<UseUtf8Encoding>Always</UseUtf8Encoding>
<BuildInParallel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BuildInParallel>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Checking Build System</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">setlocal
C:\Users\Admin\scoop\apps\cmake\current\bin\cmake.exe "-SC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" "-BC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" --check-stamp-list CMakeFiles/generate.stamp.list --vs-solution-file "C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/EclipseDumper.sln"
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal &amp; call :cmErrorLevel %errorlevel% &amp; goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeCXXCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeRCCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeSystem.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeLists.txt;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCXXInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCommonLanguageInclude.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeGenericSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeInitializeConfigs.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeLanguageInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeRCInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInitialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\CMakeCommonCompilerMacros.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCXXLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCommonLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-Initialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\WindowsPaths.cmake;%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\generate.stamp</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkObjects>
<BuildInParallel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</BuildInParallel>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Checking Build System</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">setlocal
C:\Users\Admin\scoop\apps\cmake\current\bin\cmake.exe "-SC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" "-BC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" --check-stamp-list CMakeFiles/generate.stamp.list --vs-solution-file "C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/EclipseDumper.sln"
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal &amp; call :cmErrorLevel %errorlevel% &amp; goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeCXXCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeRCCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeSystem.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeLists.txt;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCXXInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCommonLanguageInclude.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeGenericSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeInitializeConfigs.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeLanguageInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeRCInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInitialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\CMakeCommonCompilerMacros.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCXXLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCommonLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-Initialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\WindowsPaths.cmake;%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\generate.stamp</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkObjects>
<BuildInParallel Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">true</BuildInParallel>
<Message Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">Checking Build System</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">setlocal
C:\Users\Admin\scoop\apps\cmake\current\bin\cmake.exe "-SC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" "-BC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" --check-stamp-list CMakeFiles/generate.stamp.list --vs-solution-file "C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/EclipseDumper.sln"
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal &amp; call :cmErrorLevel %errorlevel% &amp; goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeCXXCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeRCCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeSystem.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeLists.txt;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCXXInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCommonLanguageInclude.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeGenericSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeInitializeConfigs.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeLanguageInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeRCInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInitialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\CMakeCommonCompilerMacros.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCXXLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCommonLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-Initialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\WindowsPaths.cmake;%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\generate.stamp</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|x64'">false</LinkObjects>
<BuildInParallel Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">true</BuildInParallel>
<Message Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">Checking Build System</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">setlocal
C:\Users\Admin\scoop\apps\cmake\current\bin\cmake.exe "-SC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" "-BC:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main" --check-stamp-list CMakeFiles/generate.stamp.list --vs-solution-file "C:/Users/Admin/Documents/EclipseeDumper-main (2)/EclipseeDumper-main/EclipseDumper.sln"
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal &amp; call :cmErrorLevel %errorlevel% &amp; goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd</Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeCXXCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeRCCompiler.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\4.1.2\CMakeSystem.cmake;C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeLists.txt;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCXXInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeCommonLanguageInclude.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeGenericSystem.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeInitializeConfigs.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeLanguageInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeRCInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\CMakeSystemSpecificInitialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\CMakeCommonCompilerMacros.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Compiler\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCXXLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Internal\CMakeCommonLinkerInformation.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Linker\MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Linker\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-Initialize.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC-CXX.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows-MSVC.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\Windows.cmake;C:\Users\Admin\scoop\apps\cmake\current\share\cmake-4.1\Modules\Platform\WindowsPaths.cmake;%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\generate.stamp</Outputs>
<LinkObjects Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|x64'">false</LinkObjects>
</CustomBuild>
</ItemGroup>
<ItemGroup>
</ItemGroup>
<ItemGroup />
<ItemGroup>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="17.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<CustomBuild Include="C:\Users\Admin\Documents\EclipseeDumper-main (2)\EclipseeDumper-main\CMakeFiles\82e1b2efbb7868df5f69a3b2cc1c0778\generate.stamp.rule">
<Filter>CMake Rules</Filter>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<Filter Include="CMake Rules">
<UniqueIdentifier>{8C9BBF2B-7163-32E9-9A70-5E7D1C3B06EB}</UniqueIdentifier>
</Filter>
</ItemGroup>
</Project>