Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Struct reading and disassembly script overhaul, various misc. loading fixes, bump to .NET 9 #13

Merged
merged 28 commits into from
Nov 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
30c019c
Bump projects to .net 9 and update nugets
LukeFZ Aug 13, 2024
22ecdc3
add VersionedSerialization + source generator
LukeFZ Aug 13, 2024
23e8732
migrate versioning to StructVersion class, add handling/detection for…
LukeFZ Aug 13, 2024
2d3b186
add new struct definitions
LukeFZ Aug 13, 2024
6c59434
rename serialization methods and add BinaryObjectStreamReader for int…
LukeFZ Aug 13, 2024
43d7433
Rework metadata struct loading to use new struct versioning
LukeFZ Aug 17, 2024
a7081cc
move 29/31.1/.2 to use tags (-2022,-2023) instead of minor versions
LukeFZ Aug 18, 2024
5d827fe
fix metadata usage validity checks
LukeFZ Aug 18, 2024
e6c51b4
rework code registration offsetting a bit and add second 29/31.1 cond…
LukeFZ Aug 24, 2024
1a12cf5
tweak .1 condition (again)
LukeFZ Aug 30, 2024
7632ff2
29/31.2 was a psyop
LukeFZ Sep 1, 2024
e67f856
also remove 29.2 from the readme
LukeFZ Sep 1, 2024
095bfa1
remove loading of packed dlls - this was a very unsafe feature
LukeFZ Oct 13, 2024
d59f672
support auto-recovering type indices from type handles
LukeFZ Oct 13, 2024
daa80bc
support loading PEs without an export table
LukeFZ Oct 26, 2024
8895979
also read UnresolvedVirtualCallCount on regular v31
LukeFZ Oct 27, 2024
792268f
Disable plugin loading for now
LukeFZ Nov 7, 2024
5715760
Overhaul disassembler script + add Binary Ninja target (#12)
LukeFZ Nov 8, 2024
08431b7
Fix metadata usage issues caused by it being a value type now
LukeFZ Nov 8, 2024
e0e8d05
make TryMapVATR overrideable and implement it for ELFs
LukeFZ Nov 9, 2024
3982e5f
Make field offset reading use TryMapVATR to reduce exceptions
LukeFZ Nov 9, 2024
bcbf4f4
Fix NRE in Assembly ctor on < v24.2
LukeFZ Nov 9, 2024
5cd9478
Update actions workflow to produce cross-platform CLI binaries, updat…
LukeFZ Nov 14, 2024
226d0df
workflow: only restore packages for projects that are being built
LukeFZ Nov 14, 2024
2bd24b9
workflow: tweak caching and fix gui compilation
LukeFZ Nov 14, 2024
e6307d0
workflow: remove double .zip in CLI artifact name
LukeFZ Nov 14, 2024
97cbf24
Merge refactored-versioning into master
LukeFZ Nov 14, 2024
d43157c
29/31.2 don't actually exist, this logic is not needed
LukeFZ Nov 14, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 51 additions & 31 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,57 +1,77 @@
name: Il2CppInspectorRedux Build

on:
push:
branches: [ master ]

workflow_dispatch:
on: [push, workflow_dispatch]

jobs:
build:
build-gui:
runs-on: windows-latest

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
submodules: true

- uses: microsoft/setup-msbuild@v1.1
- name: Setup .NET SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.0.x'

- uses: actions/cache@v3
- uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
key: ${{ runner.os }}-nuget-gui-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-
${{ runner.os }}-nuget-gui-

- name: Restore NuGet packages
run: nuget restore
run: dotnet restore -r win-x64 ./Il2CppInspector.GUI

- name: Build GUI
run: msbuild /t:Il2CppInspector_GUI:publish /p:Configuration=Release /p:Platform="Any CPU" /p:TargetFramework=net8.0-windows /p:SelfContained=false /verbosity:minimal
run: dotnet publish ./Il2CppInspector.GUI/Il2CppInspector.GUI.csproj -c Release -r win-x64 --no-self-contained

- name: Build CLI
run: msbuild /t:Il2CppInspector_CLI:publish /p:Configuration=Release /p:Platform="Any CPU" /p:TargetFramework=net8.0 /p:SelfContained=false /verbosity:minimal
- name: Upload GUI Artifact
uses: actions/upload-artifact@v4
with:
name: Il2CppInspectorRedux.GUI
path: Il2CppInspector.GUI/bin/Release/net9.0-windows/win-x64/publish

- name: Add Plugins folder (GUI)
shell: pwsh
working-directory: Il2CppInspector.GUI/bin/Release/net8.0-windows/win-x64/publish
run: ../../../../../../get-plugins.ps1
build-cli:
runs-on: ubuntu-latest
strategy:
matrix:
dotnet-version: [ '9.0.x' ]
rid: ['win-x64', 'linux-x64', 'linux-arm64', 'osx-x64', 'osx-arm64']

- name: Add Plugins folder (CLI)
shell: pwsh
working-directory: Il2CppInspector.CLI/bin/Release/net8.0/win-x64/publish
run: ../../../../../../get-plugins.ps1
steps:
- uses: actions/checkout@v4
with:
submodules: true

- name: Upload GUI Artifact
uses: actions/upload-artifact@v3
- name: Setup .NET SDK
uses: actions/setup-dotnet@v4
with:
name: Il2CppInspectorRedux.GUI
path: Il2CppInspector.GUI/bin/Release/net8.0-windows/win-x64/publish
dotnet-version: '9.0.x'

- uses: actions/cache@v3
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-cli-${{ matrix.rid }}-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-cli-${{ matrix.rid }}-

- name: Upload CLI Artifact
uses: actions/upload-artifact@v2
- name: Setup .NET SDK ${{ matrix.dotnet-version }}
uses: actions/setup-dotnet@v3
with:
name: Il2CppInspectorRedux.CLI
path: Il2CppInspector.CLI/bin/Release/net8.0/win-x64/publish
dotnet-version: ${{ matrix.dotnet-version }}

- name: Install dependencies
run: dotnet restore -r ${{ matrix.rid }} ./Il2CppInspector.CLI

- name: Build & Publish
run: dotnet publish -c Release --no-self-contained --no-restore -o ./${{ matrix.rid }} -r ${{ matrix.rid }} ./Il2CppInspector.CLI/Il2CppInspector.CLI.csproj

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: Il2CppInspectorRedux.CLI-${{ matrix.rid }}
path: ./${{ matrix.rid }}
4 changes: 2 additions & 2 deletions Il2CppInspector.CLI/Il2CppInspector.CLI.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net9.0</TargetFramework>

<PublishSingleFile>true</PublishSingleFile>
<!-- Plugins may require bass class library assemblies we're not using so disable trimming -->
Expand Down Expand Up @@ -32,7 +32,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="CommandLineParser" Version="2.6.0" />
<PackageReference Include="CommandLineParser" Version="2.9.1" />
</ItemGroup>

<ItemGroup>
Expand Down
5 changes: 3 additions & 2 deletions Il2CppInspector.Common/Architectures/Il2CppBinaryARM.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
All rights reserved.
*/

using Il2CppInspector.Next;
using System;
using System.Collections.Generic;
using System.Linq;
Expand Down Expand Up @@ -342,10 +343,10 @@ protected override (ulong, ulong) ConsiderCode(IFileFormatStream image, uint loc
// In v21 and later, R0-R2 + PC will be set and they will be the only registers set
// Pre-v21, R0-R1 + PC will be the only registers set

if (image.Version >= 21 && regs.Count == 4 && regs.TryGetValue(0, out r0) && regs.TryGetValue(1, out r1) && regs.TryGetValue(2, out uint _))
if (image.Version >= MetadataVersions.V210 && regs.Count == 4 && regs.TryGetValue(0, out r0) && regs.TryGetValue(1, out r1) && regs.TryGetValue(2, out uint _))
return (r0 & 0xffff_fffe, r1 & 0xffff_fffe);

if (image.Version < 21 && regs.Count == 3 && regs.TryGetValue(0, out r0) && regs.TryGetValue(1, out r1))
if (image.Version < MetadataVersions.V210 && regs.Count == 3 && regs.TryGetValue(0, out r0) && regs.TryGetValue(1, out r1))
return (r0 & 0xffff_fffe, r1 & 0xffff_fffe);

return (0, 0);
Expand Down
5 changes: 3 additions & 2 deletions Il2CppInspector.Common/Architectures/Il2CppBinaryARM64.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
All rights reserved.
*/

using Il2CppInspector.Next;
using System;
using System.Collections.Generic;

Expand Down Expand Up @@ -168,10 +169,10 @@ protected override (ulong, ulong) ConsiderCode(IFileFormatStream image, uint loc
// Is it Il2CppCodegenRegistration(void)?
// In v21 and later, X0-X2 will be set and they will be the only registers set
// Pre-v21, X0-X1 will be the only registers set
if (image.Version >= 21 && regs.Count == 3 && regs.TryGetValue(0, out ulong x0) && regs.TryGetValue(1, out x1) && regs.TryGetValue(2, out ulong _))
if (image.Version >= MetadataVersions.V210 && regs.Count == 3 && regs.TryGetValue(0, out ulong x0) && regs.TryGetValue(1, out x1) && regs.TryGetValue(2, out ulong _))
return (x0, x1);

if (image.Version < 21 && regs.Count == 2 && regs.TryGetValue(0, out x0) && regs.TryGetValue(1, out x1))
if (image.Version < MetadataVersions.V210 && regs.Count == 2 && regs.TryGetValue(0, out x0) && regs.TryGetValue(1, out x1))
return (x0, x1);

return (0, 0);
Expand Down
3 changes: 2 additions & 1 deletion Il2CppInspector.Common/Architectures/Il2CppBinaryX64.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
All rights reserved.
*/

using Il2CppInspector.Next;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
Expand Down Expand Up @@ -216,7 +217,7 @@ protected override (ulong, ulong) ConsiderCode(IFileFormatStream image, uint loc
offset = nextLea?.foundOffset + leaSize ?? buff2Size;
}

if ((image.Version < 21 && leas.Count == 2) || (image.Version >= 21 && leas.Count == 3)) {
if ((image.Version < MetadataVersions.V210 && leas.Count == 2) || (image.Version >= MetadataVersions.V210 && leas.Count == 3)) {
// Register-based argument passing?
var leaRSI = leas.FirstOrDefault(l => l.Value == RSI).Key.address;
var leaRDI = leas.FirstOrDefault(l => l.Value == RDI).Key.address;
Expand Down
3 changes: 2 additions & 1 deletion Il2CppInspector.Common/Architectures/Il2CppBinaryX86.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
All rights reserved.
*/

using Il2CppInspector.Next;
using System;
using System.Linq;

Expand Down Expand Up @@ -34,7 +35,7 @@ protected override (ulong, ulong) ConsiderCode(IFileFormatStream image, uint loc
return (0, 0);

// Jump to Il2CppCodegenRegistration
if(image.Version < 21) {
if(image.Version < MetadataVersions.V210) {
image.Position = image.MapVATR((ulong)pCgr + 1);
metadata = image.ReadUInt32();
image.Position = image.MapVATR((ulong)pCgr + 6);
Expand Down
Loading
Loading