mirror of
https://github.com/Perfare/Il2CppDumper.git
synced 2025-02-02 14:07:06 -03:00
整理代码
This commit is contained in:
parent
a357705e15
commit
1b2fe8eb09
7 changed files with 80 additions and 119 deletions
|
@ -5,7 +5,7 @@ namespace Il2CppDumper
|
||||||
{
|
{
|
||||||
static class BoyerMooreHorspool
|
static class BoyerMooreHorspool
|
||||||
{
|
{
|
||||||
public static IEnumerable<int> IndicesOf(this byte[] source, byte[] pattern)
|
public static IEnumerable<int> Search(this byte[] source, byte[] pattern)
|
||||||
{
|
{
|
||||||
if (source == null)
|
if (source == null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -165,6 +165,10 @@ namespace Il2CppDumper
|
||||||
|
|
||||||
public ulong[] ReadPointers(ulong addr, long count)
|
public ulong[] ReadPointers(ulong addr, long count)
|
||||||
{
|
{
|
||||||
|
if (addr == 0 || count == 0)
|
||||||
|
{
|
||||||
|
return new ulong[0];
|
||||||
|
}
|
||||||
if (is32Bit)
|
if (is32Bit)
|
||||||
{
|
{
|
||||||
return Array.ConvertAll(MapVATR<uint>(addr, count), x => (ulong)x);
|
return Array.ConvertAll(MapVATR<uint>(addr, count), x => (ulong)x);
|
||||||
|
|
|
@ -211,7 +211,7 @@ namespace Il2CppDumper
|
||||||
}
|
}
|
||||||
if (val is string str)
|
if (val is string str)
|
||||||
{
|
{
|
||||||
writer.Write($" = \"{ToEscapedString(str)}\"");
|
writer.Write($" = \"{str.ToEscapedString()}\"");
|
||||||
}
|
}
|
||||||
else if (val is char c)
|
else if (val is char c)
|
||||||
{
|
{
|
||||||
|
@ -327,7 +327,7 @@ namespace Il2CppDumper
|
||||||
var value = GetDefaultValue(parameterDefault.typeIndex, parameterDefault.dataIndex);
|
var value = GetDefaultValue(parameterDefault.typeIndex, parameterDefault.dataIndex);
|
||||||
if (value is string str)
|
if (value is string str)
|
||||||
{
|
{
|
||||||
parameterStr += $" = \"{ToEscapedString(str)}\"";
|
parameterStr += $" = \"{str.ToEscapedString()}\"";
|
||||||
}
|
}
|
||||||
else if (value is char c)
|
else if (value is char c)
|
||||||
{
|
{
|
||||||
|
@ -376,7 +376,7 @@ namespace Il2CppDumper
|
||||||
writer.Close();
|
writer.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetTypeName(Il2CppType type, bool fullName = false)
|
public string GetTypeName(Il2CppType type)
|
||||||
{
|
{
|
||||||
string ret;
|
string ret;
|
||||||
switch (type.type)
|
switch (type.type)
|
||||||
|
@ -385,16 +385,7 @@ namespace Il2CppDumper
|
||||||
case Il2CppTypeEnum.IL2CPP_TYPE_VALUETYPE:
|
case Il2CppTypeEnum.IL2CPP_TYPE_VALUETYPE:
|
||||||
{
|
{
|
||||||
var typeDef = metadata.typeDefs[type.data.klassIndex];
|
var typeDef = metadata.typeDefs[type.data.klassIndex];
|
||||||
ret = string.Empty;
|
ret = GetTypeName(typeDef);
|
||||||
if (fullName)
|
|
||||||
{
|
|
||||||
ret = metadata.GetStringFromIndex(typeDef.namespaceIndex);
|
|
||||||
if (ret != string.Empty)
|
|
||||||
{
|
|
||||||
ret += ".";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ret += GetTypeName(typeDef);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Il2CppTypeEnum.IL2CPP_TYPE_GENERICINST:
|
case Il2CppTypeEnum.IL2CPP_TYPE_GENERICINST:
|
||||||
|
@ -568,56 +559,5 @@ namespace Il2CppDumper
|
||||||
throw new ArgumentOutOfRangeException();
|
throw new ArgumentOutOfRangeException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string ToEscapedString(string s)
|
|
||||||
{
|
|
||||||
var re = new StringBuilder(s.Length);
|
|
||||||
foreach (var c in s)
|
|
||||||
{
|
|
||||||
switch (c)
|
|
||||||
{
|
|
||||||
case '\'':
|
|
||||||
re.Append(@"\'");
|
|
||||||
break;
|
|
||||||
case '"':
|
|
||||||
re.Append(@"\""");
|
|
||||||
break;
|
|
||||||
case '\t':
|
|
||||||
re.Append(@"\t");
|
|
||||||
break;
|
|
||||||
case '\n':
|
|
||||||
re.Append(@"\n");
|
|
||||||
break;
|
|
||||||
case '\r':
|
|
||||||
re.Append(@"\r");
|
|
||||||
break;
|
|
||||||
case '\f':
|
|
||||||
re.Append(@"\f");
|
|
||||||
break;
|
|
||||||
case '\b':
|
|
||||||
re.Append(@"\b");
|
|
||||||
break;
|
|
||||||
case '\\':
|
|
||||||
re.Append(@"\\");
|
|
||||||
break;
|
|
||||||
case '\0':
|
|
||||||
re.Append(@"\0");
|
|
||||||
break;
|
|
||||||
case '\u0085':
|
|
||||||
re.Append(@"\u0085");
|
|
||||||
break;
|
|
||||||
case '\u2028':
|
|
||||||
re.Append(@"\u2028");
|
|
||||||
break;
|
|
||||||
case '\u2029':
|
|
||||||
re.Append(@"\u2029");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
re.Append(c);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return re.ToString();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,6 +56,7 @@
|
||||||
<Compile Include="NSOClass.cs" />
|
<Compile Include="NSOClass.cs" />
|
||||||
<Compile Include="ScriptGenerator.cs" />
|
<Compile Include="ScriptGenerator.cs" />
|
||||||
<Compile Include="SearchSection.cs" />
|
<Compile Include="SearchSection.cs" />
|
||||||
|
<Compile Include="StringExtensions.cs" />
|
||||||
<Compile Include="VersionAttribute.cs" />
|
<Compile Include="VersionAttribute.cs" />
|
||||||
<Compile Include="Config.cs" />
|
<Compile Include="Config.cs" />
|
||||||
<Compile Include="DummyAssemblyGenerator.cs" />
|
<Compile Include="DummyAssemblyGenerator.cs" />
|
||||||
|
|
|
@ -350,7 +350,7 @@ namespace Il2CppDumper
|
||||||
{
|
{
|
||||||
il2Cpp.Position = sec.offset;
|
il2Cpp.Position = sec.offset;
|
||||||
var buff = il2Cpp.ReadBytes((int)(sec.offsetEnd - sec.offset));
|
var buff = il2Cpp.ReadBytes((int)(sec.offsetEnd - sec.offset));
|
||||||
foreach (var index in buff.IndicesOf(featureBytes2019))
|
foreach (var index in buff.Search(featureBytes2019))
|
||||||
{
|
{
|
||||||
var va = (ulong)index + sec.address;
|
var va = (ulong)index + sec.address;
|
||||||
foreach (var dataSec in data)
|
foreach (var dataSec in data)
|
||||||
|
@ -404,7 +404,7 @@ namespace Il2CppDumper
|
||||||
{
|
{
|
||||||
il2Cpp.Position = sec.offset;
|
il2Cpp.Position = sec.offset;
|
||||||
var buff = il2Cpp.ReadBytes((int)(sec.offsetEnd - sec.offset));
|
var buff = il2Cpp.ReadBytes((int)(sec.offsetEnd - sec.offset));
|
||||||
foreach (var index in buff.IndicesOf(featureBytes2019))
|
foreach (var index in buff.Search(featureBytes2019))
|
||||||
{
|
{
|
||||||
var va = (ulong)index + sec.address;
|
var va = (ulong)index + sec.address;
|
||||||
foreach (var dataSec in data)
|
foreach (var dataSec in data)
|
||||||
|
|
|
@ -125,7 +125,7 @@ namespace Il2CppDumper
|
||||||
File.WriteAllText("stringliteral.json", JsonConvert.SerializeObject(stringLiterals, Formatting.Indented), new UTF8Encoding(false)); //TODO
|
File.WriteAllText("stringliteral.json", JsonConvert.SerializeObject(stringLiterals, Formatting.Indented), new UTF8Encoding(false)); //TODO
|
||||||
foreach (var stringLiteral in stringLiterals)
|
foreach (var stringLiteral in stringLiterals)
|
||||||
{
|
{
|
||||||
writer.WriteLine($"SetString({stringLiteral.address}, r'{ToEscapedString(stringLiteral.value)}')");
|
writer.WriteLine($"SetString({stringLiteral.address}, r'{stringLiteral.value.ToEscapedString()}')");
|
||||||
}
|
}
|
||||||
foreach (var i in metadata.metadataUsageDic[6]) //kIl2CppMetadataUsageMethodRef
|
foreach (var i in metadata.metadataUsageDic[6]) //kIl2CppMetadataUsageMethodRef
|
||||||
{
|
{
|
||||||
|
@ -268,56 +268,5 @@ namespace Il2CppDumper
|
||||||
}
|
}
|
||||||
return $"<{string.Join(", ", typeNames)}>";
|
return $"<{string.Join(", ", typeNames)}>";
|
||||||
}
|
}
|
||||||
|
|
||||||
public string ToEscapedString(string s)
|
|
||||||
{
|
|
||||||
var re = new StringBuilder(s.Length);
|
|
||||||
foreach (var c in s)
|
|
||||||
{
|
|
||||||
switch (c)
|
|
||||||
{
|
|
||||||
case '\'':
|
|
||||||
re.Append(@"\'");
|
|
||||||
break;
|
|
||||||
case '"':
|
|
||||||
re.Append(@"\""");
|
|
||||||
break;
|
|
||||||
case '\t':
|
|
||||||
re.Append(@"\t");
|
|
||||||
break;
|
|
||||||
case '\n':
|
|
||||||
re.Append(@"\n");
|
|
||||||
break;
|
|
||||||
case '\r':
|
|
||||||
re.Append(@"\r");
|
|
||||||
break;
|
|
||||||
case '\f':
|
|
||||||
re.Append(@"\f");
|
|
||||||
break;
|
|
||||||
case '\b':
|
|
||||||
re.Append(@"\b");
|
|
||||||
break;
|
|
||||||
case '\\':
|
|
||||||
re.Append(@"\\");
|
|
||||||
break;
|
|
||||||
case '\0':
|
|
||||||
re.Append(@"\0");
|
|
||||||
break;
|
|
||||||
case '\u0085':
|
|
||||||
re.Append(@"\u0085");
|
|
||||||
break;
|
|
||||||
case '\u2028':
|
|
||||||
re.Append(@"\u2028");
|
|
||||||
break;
|
|
||||||
case '\u2029':
|
|
||||||
re.Append(@"\u2029");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
re.Append(c);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return re.ToString();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
67
Il2CppDumper/StringExtensions.cs
Normal file
67
Il2CppDumper/StringExtensions.cs
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Il2CppDumper
|
||||||
|
{
|
||||||
|
public static class StringExtensions
|
||||||
|
{
|
||||||
|
public static string ToEscapedString(this string s)
|
||||||
|
{
|
||||||
|
var re = new StringBuilder(s.Length);
|
||||||
|
foreach (var c in s)
|
||||||
|
{
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case '\'':
|
||||||
|
re.Append(@"\'");
|
||||||
|
break;
|
||||||
|
case '"':
|
||||||
|
re.Append(@"\""");
|
||||||
|
break;
|
||||||
|
case '\\':
|
||||||
|
re.Append(@"\\");
|
||||||
|
break;
|
||||||
|
case '\0':
|
||||||
|
re.Append(@"\0");
|
||||||
|
break;
|
||||||
|
case '\a':
|
||||||
|
re.Append(@"\a");
|
||||||
|
break;
|
||||||
|
case '\b':
|
||||||
|
re.Append(@"\b");
|
||||||
|
break;
|
||||||
|
case '\f':
|
||||||
|
re.Append(@"\f");
|
||||||
|
break;
|
||||||
|
case '\n':
|
||||||
|
re.Append(@"\n");
|
||||||
|
break;
|
||||||
|
case '\r':
|
||||||
|
re.Append(@"\r");
|
||||||
|
break;
|
||||||
|
case '\t':
|
||||||
|
re.Append(@"\t");
|
||||||
|
break;
|
||||||
|
case '\v':
|
||||||
|
re.Append(@"\v");
|
||||||
|
break;
|
||||||
|
case '\u0085':
|
||||||
|
re.Append(@"\u0085");
|
||||||
|
break;
|
||||||
|
case '\u2028':
|
||||||
|
re.Append(@"\u2028");
|
||||||
|
break;
|
||||||
|
case '\u2029':
|
||||||
|
re.Append(@"\u2029");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
re.Append(c);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return re.ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue