Skip to content

Commit 65ad2bf

Browse files
committed
Fixed #439
1 parent 7a0ee09 commit 65ad2bf

File tree

7 files changed

+76
-50
lines changed

7 files changed

+76
-50
lines changed

Il2CppDumper/ExecutableFormats/Elf.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,11 @@ public override ulong MapVATR(ulong addr)
8484

8585
public override ulong MapRTVA(ulong addr)
8686
{
87-
var phdr = programSegment.First(x => addr >= x.p_offset && addr <= x.p_offset + x.p_filesz);
87+
var phdr = programSegment.FirstOrDefault(x => addr >= x.p_offset && addr <= x.p_offset + x.p_filesz);
88+
if (phdr == null)
89+
{
90+
return 0;
91+
}
8892
return addr - phdr.p_offset + phdr.p_vaddr;
8993
}
9094

Il2CppDumper/ExecutableFormats/Elf64.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,11 @@ public override ulong MapVATR(ulong addr)
7575

7676
public override ulong MapRTVA(ulong addr)
7777
{
78-
var phdr = programSegment.First(x => addr >= x.p_offset && addr <= x.p_offset + x.p_filesz);
78+
var phdr = programSegment.FirstOrDefault(x => addr >= x.p_offset && addr <= x.p_offset + x.p_filesz);
79+
if (phdr == null)
80+
{
81+
return 0;
82+
}
7983
return addr - phdr.p_offset + phdr.p_vaddr;
8084
}
8185

Il2CppDumper/ExecutableFormats/Macho.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,11 @@ public override ulong MapVATR(ulong addr)
8282

8383
public override ulong MapRTVA(ulong addr)
8484
{
85-
var section = sections.First(x => addr >= x.offset && addr <= x.offset + x.size);
85+
var section = sections.FirstOrDefault(x => addr >= x.offset && addr <= x.offset + x.size);
86+
if (section == null)
87+
{
88+
return 0;
89+
}
8690
return addr - section.offset + section.addr;
8791
}
8892

Il2CppDumper/ExecutableFormats/Macho64.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,11 @@ public override ulong MapVATR(ulong addr)
7878

7979
public override ulong MapRTVA(ulong addr)
8080
{
81-
var section = sections.First(x => addr >= x.offset && addr <= x.offset + x.size);
81+
var section = sections.FirstOrDefault(x => addr >= x.offset && addr <= x.offset + x.size);
82+
if (section == null)
83+
{
84+
return 0;
85+
}
8286
if (section.sectname == "__bss")
8387
{
8488
throw new Exception();

Il2CppDumper/ExecutableFormats/NSO.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,11 @@ public override ulong MapVATR(ulong addr)
9898

9999
public override ulong MapRTVA(ulong addr)
100100
{
101-
var segment = segments.First(x => addr >= x.FileOffset && addr <= x.FileOffset + x.DecompressedSize);
101+
var segment = segments.FirstOrDefault(x => addr >= x.FileOffset && addr <= x.FileOffset + x.DecompressedSize);
102+
if (segment == null)
103+
{
104+
return 0;
105+
}
102106
return addr - segment.FileOffset + segment.MemoryOffset;
103107
}
104108

Il2CppDumper/Outputs/StructGenerator.cs

Lines changed: 46 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -261,50 +261,53 @@ public void WriteScript(string outputDir)
261261
if (metadataValue == ((usage << 29) | (decodedIndex << 1)) + 1)
262262
{
263263
var va = il2Cpp.MapRTVA(addr);
264-
switch ((Il2CppMetadataUsage)usage)
264+
if (va > 0)
265265
{
266-
case Il2CppMetadataUsage.kIl2CppMetadataUsageInvalid:
267-
break;
268-
case Il2CppMetadataUsage.kIl2CppMetadataUsageTypeInfo:
269-
if (decodedIndex < il2Cpp.types.Length)
270-
{
271-
AddMetadataUsageTypeInfo(json, decodedIndex, va);
272-
}
273-
break;
274-
case Il2CppMetadataUsage.kIl2CppMetadataUsageIl2CppType:
275-
if (decodedIndex < il2Cpp.types.Length)
276-
{
277-
AddMetadataUsageIl2CppType(json, decodedIndex, va);
278-
}
279-
break;
280-
case Il2CppMetadataUsage.kIl2CppMetadataUsageMethodDef:
281-
if (decodedIndex < metadata.methodDefs.Length)
282-
{
283-
AddMetadataUsageMethodDef(json, decodedIndex, va);
284-
}
285-
break;
286-
case Il2CppMetadataUsage.kIl2CppMetadataUsageFieldInfo:
287-
if (decodedIndex < metadata.fieldRefs.Length)
288-
{
289-
AddMetadataUsageFieldInfo(json, decodedIndex, va);
290-
}
291-
break;
292-
case Il2CppMetadataUsage.kIl2CppMetadataUsageStringLiteral:
293-
if (decodedIndex < metadata.stringLiterals.Length)
294-
{
295-
AddMetadataUsageStringLiteral(json, decodedIndex, va);
296-
}
297-
break;
298-
case Il2CppMetadataUsage.kIl2CppMetadataUsageMethodRef:
299-
if (decodedIndex < il2Cpp.methodSpecs.Length)
300-
{
301-
AddMetadataUsageMethodRef(json, decodedIndex, va);
302-
}
303-
break;
304-
}
305-
if (il2Cpp.Position != position)
306-
{
307-
il2Cpp.Position = position;
266+
switch ((Il2CppMetadataUsage)usage)
267+
{
268+
case Il2CppMetadataUsage.kIl2CppMetadataUsageInvalid:
269+
break;
270+
case Il2CppMetadataUsage.kIl2CppMetadataUsageTypeInfo:
271+
if (decodedIndex < il2Cpp.types.Length)
272+
{
273+
AddMetadataUsageTypeInfo(json, decodedIndex, va);
274+
}
275+
break;
276+
case Il2CppMetadataUsage.kIl2CppMetadataUsageIl2CppType:
277+
if (decodedIndex < il2Cpp.types.Length)
278+
{
279+
AddMetadataUsageIl2CppType(json, decodedIndex, va);
280+
}
281+
break;
282+
case Il2CppMetadataUsage.kIl2CppMetadataUsageMethodDef:
283+
if (decodedIndex < metadata.methodDefs.Length)
284+
{
285+
AddMetadataUsageMethodDef(json, decodedIndex, va);
286+
}
287+
break;
288+
case Il2CppMetadataUsage.kIl2CppMetadataUsageFieldInfo:
289+
if (decodedIndex < metadata.fieldRefs.Length)
290+
{
291+
AddMetadataUsageFieldInfo(json, decodedIndex, va);
292+
}
293+
break;
294+
case Il2CppMetadataUsage.kIl2CppMetadataUsageStringLiteral:
295+
if (decodedIndex < metadata.stringLiterals.Length)
296+
{
297+
AddMetadataUsageStringLiteral(json, decodedIndex, va);
298+
}
299+
break;
300+
case Il2CppMetadataUsage.kIl2CppMetadataUsageMethodRef:
301+
if (decodedIndex < il2Cpp.methodSpecs.Length)
302+
{
303+
AddMetadataUsageMethodRef(json, decodedIndex, va);
304+
}
305+
break;
306+
}
307+
if (il2Cpp.Position != position)
308+
{
309+
il2Cpp.Position = position;
310+
}
308311
}
309312
}
310313
}

Il2CppDumper/Utils/Il2CppExecutor.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,11 @@ public Il2CppExecutor(Metadata metadata, Il2Cpp il2Cpp)
4343
{
4444
var imageDefName = metadata.GetStringFromIndex(imageDef.nameIndex);
4545
var codeGenModule = il2Cpp.codeGenModules[imageDefName];
46-
var pointers = il2Cpp.ReadClassArray<ulong>(il2Cpp.MapVATR(codeGenModule.customAttributeCacheGenerator), imageDef.customAttributeCount);
47-
pointers.CopyTo(customAttributeGenerators, imageDef.customAttributeStart);
46+
if (imageDef.customAttributeCount > 0)
47+
{
48+
var pointers = il2Cpp.ReadClassArray<ulong>(il2Cpp.MapVATR(codeGenModule.customAttributeCacheGenerator), imageDef.customAttributeCount);
49+
pointers.CopyTo(customAttributeGenerators, imageDef.customAttributeStart);
50+
}
4851
}
4952
}
5053
else

0 commit comments

Comments
 (0)