This commit is contained in:
Perfare 2023-02-08 20:07:22 +08:00
parent 6c9bf6648f
commit 23285b5636
6 changed files with 26 additions and 16 deletions

View file

@ -29,7 +29,7 @@ namespace Il2CppDumper
FixedProgramSegment();
}
pt_dynamic = programSegment.First(x => x.p_type == PT_DYNAMIC);
dynamicSection = ReadClassArray<Elf64_Dyn>(pt_dynamic.p_offset, (long)pt_dynamic.p_filesz / 16L);
dynamicSection = ReadClassArray<Elf64_Dyn>(pt_dynamic.p_offset, pt_dynamic.p_filesz / 16L);
if (IsDumped)
{
FixedDynamicSection();
@ -187,7 +187,7 @@ namespace Il2CppDumper
{
var relaOffset = MapVATR(dynamicSection.First(x => x.d_tag == DT_RELA).d_un);
var relaSize = dynamicSection.First(x => x.d_tag == DT_RELASZ).d_un;
var relaTable = ReadClassArray<Elf64_Rela>(relaOffset, (long)relaSize / 24L);
var relaTable = ReadClassArray<Elf64_Rela>(relaOffset, relaSize / 24L);
foreach (var rela in relaTable)
{
var type = rela.r_info & 0xffffffff;

View file

@ -97,7 +97,7 @@ namespace Il2CppDumper
if (Version < 23)
{
var __mod_init_func = sections.First(x => x.sectname == "__mod_init_func");
var addrs = ReadClassArray<ulong>(__mod_init_func.offset, (long)__mod_init_func.size / 8);
var addrs = ReadClassArray<ulong>(__mod_init_func.offset, __mod_init_func.size / 8);
foreach (var i in addrs)
{
if (i > 0)
@ -163,7 +163,7 @@ namespace Il2CppDumper
* B sub
*/
var __mod_init_func = sections.First(x => x.sectname == "__mod_init_func");
var addrs = ReadClassArray<ulong>(__mod_init_func.offset, (long)__mod_init_func.size / 8);
var addrs = ReadClassArray<ulong>(__mod_init_func.offset, __mod_init_func.size / 8);
foreach (var i in addrs)
{
if (i > 0)
@ -200,7 +200,7 @@ namespace Il2CppDumper
* B sub
*/
var __mod_init_func = sections.First(x => x.sectname == "__mod_init_func");
var addrs = ReadClassArray<ulong>(__mod_init_func.offset, (long)__mod_init_func.size / 8);
var addrs = ReadClassArray<ulong>(__mod_init_func.offset, __mod_init_func.size / 8);
foreach (var i in addrs)
{
if (i > 0)

View file

@ -169,7 +169,7 @@ namespace Il2CppDumper
{
var relaOffset = MapVATR(dynamicSection.First(x => x.d_tag == DT_RELA).d_un);
var relaSize = dynamicSection.First(x => x.d_tag == DT_RELASZ).d_un;
var relaTable = ReadClassArray<Elf64_Rela>(relaOffset, (long)relaSize / 24L);
var relaTable = ReadClassArray<Elf64_Rela>(relaOffset, relaSize / 24L);
foreach (var rela in relaTable)
{
var type = rela.r_info & 0xffffffff;

View file

@ -199,6 +199,11 @@ namespace Il2CppDumper
return t;
}
public T[] ReadClassArray<T>(ulong addr, ulong count) where T : new()
{
return ReadClassArray<T>(addr, (long)count);
}
public T[] ReadClassArray<T>(ulong addr, long count) where T : new()
{
Position = addr;

View file

@ -52,7 +52,7 @@ namespace Il2CppDumper
{
if (codeRegistration != 0)
{
var limit = this is WebAssemblyMemory ? 0x35000 : 0x50000; //TODO
var limit = this is WebAssemblyMemory ? 0x35000u : 0x50000u; //TODO
if (Version >= 24.2)
{
pCodeRegistration = MapVATR<Il2CppCodeRegistration>(codeRegistration);
@ -108,7 +108,7 @@ namespace Il2CppDumper
public virtual void Init(ulong codeRegistration, ulong metadataRegistration)
{
pCodeRegistration = MapVATR<Il2CppCodeRegistration>(codeRegistration);
var limit = this is WebAssemblyMemory ? 0x35000 : 0x50000; //TODO
var limit = this is WebAssemblyMemory ? 0x35000u : 0x50000u; //TODO
if (Version == 27 && pCodeRegistration.invokerPointersCount > limit)
{
Version = 27.1;
@ -249,6 +249,11 @@ namespace Il2CppDumper
return ReadClass<T>(MapVATR(addr));
}
public T[] MapVATR<T>(ulong addr, ulong count) where T : new()
{
return ReadClassArray<T>(MapVATR(addr), count);
}
public T[] MapVATR<T>(ulong addr, long count) where T : new()
{
return ReadClassArray<T>(MapVATR(addr), count);

View file

@ -5,7 +5,7 @@ namespace Il2CppDumper
public class Il2CppCodeRegistration
{
[Version(Max = 24.1)]
public long methodPointersCount;
public ulong methodPointersCount;
[Version(Max = 24.1)]
public ulong methodPointers;
[Version(Max = 21)]
@ -13,7 +13,7 @@ namespace Il2CppDumper
[Version(Max = 21)]
public ulong delegateWrappersFromNativeToManaged; // note the double indirection to handle different calling conventions
[Version(Min = 22)]
public long reversePInvokeWrapperCount;
public ulong reversePInvokeWrapperCount;
[Version(Min = 22)]
public ulong reversePInvokeWrappers;
[Version(Max = 22)]
@ -28,23 +28,23 @@ namespace Il2CppDumper
public ulong ccwMarshalingFunctionsCount;
[Version(Min = 21, Max = 22)]
public ulong ccwMarshalingFunctions;
public long genericMethodPointersCount;
public ulong genericMethodPointersCount;
public ulong genericMethodPointers;
[Version(Min = 24.5, Max = 24.5)]
[Version(Min = 27.1)]
public ulong genericAdjustorThunks;
public long invokerPointersCount;
public ulong invokerPointersCount;
public ulong invokerPointers;
[Version(Max = 24.5)]
public long customAttributeCount;
public ulong customAttributeCount;
[Version(Max = 24.5)]
public ulong customAttributeGenerators;
[Version(Min = 21, Max = 22)]
public long guidCount;
public ulong guidCount;
[Version(Min = 21, Max = 22)]
public ulong guids; // Il2CppGuid
[Version(Min = 22)]
public long unresolvedVirtualCallCount; //29.1 unresolvedIndirectCallCount;
public ulong unresolvedVirtualCallCount; //29.1 unresolvedIndirectCallCount;
[Version(Min = 22)]
public ulong unresolvedVirtualCallPointers;
[Version(Min = 29.1)]
@ -60,7 +60,7 @@ namespace Il2CppDumper
[Version(Min = 24.3)]
public ulong windowsRuntimeFactoryTable;
[Version(Min = 24.2)]
public long codeGenModulesCount;
public ulong codeGenModulesCount;
[Version(Min = 24.2)]
public ulong codeGenModules;
}