public static string GetScriptString(ObjectReader reader) { if (!moduleLoaded) { var openFolderDialog = new OpenFolderDialog(); openFolderDialog.Title = "Select Assembly Folder"; if (openFolderDialog.ShowDialog() == DialogResult.OK) { var files = Directory.GetFiles(openFolderDialog.Folder, "*.dll"); var moduleContext = new ModuleContext(); var asmResolver = new AssemblyResolver(moduleContext, true); var resolver = new Resolver(asmResolver); moduleContext.AssemblyResolver = asmResolver; moduleContext.Resolver = resolver; try { foreach (var file in files) { var module = ModuleDefMD.Load(file, moduleContext); LoadedModuleDic.Add(Path.GetFileName(file), module); } } catch { // ignored } } moduleLoaded = true; } var m_MonoBehaviour = new MonoBehaviour(reader); var sb = CreateMonoBehaviourHeader(m_MonoBehaviour); if (m_MonoBehaviour.m_Script.TryGet(out var script)) { var m_Script = new MonoScript(script); if (!LoadedModuleDic.TryGetValue(m_Script.m_AssemblyName, out var module)) { return(sb.ToString()); } var typeDef = module.Assembly.Find(m_Script.m_Namespace != "" ? $"{m_Script.m_Namespace}.{m_Script.m_ClassName}" : m_Script.m_ClassName, false); if (typeDef != null) { try { DumpType(typeDef.ToTypeSig(), sb, reader, null, -1, true); } catch { sb = CreateMonoBehaviourHeader(m_MonoBehaviour); } } } return(sb.ToString()); }
public static string GetScriptString(AssetPreloadData assetPreloadData) { if (!moduleLoaded) { var openFolderDialog = new OpenFolderDialog(); openFolderDialog.Title = "Select Assembly Folder"; if (openFolderDialog.ShowDialog() == DialogResult.OK) { var files = Directory.GetFiles(openFolderDialog.Folder, "*.dll"); var moduleContext = new ModuleContext(); var asmResolver = new AssemblyResolver(moduleContext, true); var resolver = new Resolver(asmResolver); moduleContext.AssemblyResolver = asmResolver; moduleContext.Resolver = resolver; try { foreach (var file in files) { var module = ModuleDefMD.Load(file, moduleContext); LoadedModuleDic.Add(Path.GetFileName(file), module); } } catch { // ignored } } moduleLoaded = true; } var m_MonoBehaviour = new MonoBehaviour(assetPreloadData); var sb = new StringBuilder(); sb.AppendLine("PPtr<GameObject> m_GameObject"); sb.AppendLine($"\tint m_FileID = {m_MonoBehaviour.m_GameObject.m_FileID}"); sb.AppendLine($"\tint64 m_PathID = {m_MonoBehaviour.m_GameObject.m_PathID}"); sb.AppendLine($"UInt8 m_Enabled = {m_MonoBehaviour.m_Enabled}"); sb.AppendLine("PPtr<MonoScript> m_Script"); sb.AppendLine($"\tint m_FileID = {m_MonoBehaviour.m_Script.m_FileID}"); sb.AppendLine($"\tint64 m_PathID = {m_MonoBehaviour.m_Script.m_PathID}"); sb.AppendLine($"string m_Name = \"{m_MonoBehaviour.m_Name}\""); if (assetsfileList.TryGetPD(m_MonoBehaviour.m_Script, out var script)) { var m_Script = new MonoScript(script); if (!LoadedModuleDic.TryGetValue(m_Script.m_AssemblyName, out var module)) { /*using (var openFileDialog = new OpenFileDialog()) * { * openFileDialog.Title = $"Select {m_Script.m_AssemblyName}"; * openFileDialog.FileName = m_Script.m_AssemblyName; * openFileDialog.Filter = $"{m_Script.m_AssemblyName}|{m_Script.m_AssemblyName}"; * if (openFileDialog.ShowDialog() == DialogResult.OK) * { * var moduleContext = new ModuleContext(); * var asmResolver = new AssemblyResolver(moduleContext, true); * var resolver = new Resolver(asmResolver); * moduleContext.AssemblyResolver = asmResolver; * moduleContext.Resolver = resolver; * module = ModuleDefMD.Load(openFileDialog.FileName, moduleContext); * LoadedModule.Add(m_Script.m_AssemblyName, module); * } * else * { * return sb.ToString(); * } * }*/ return(sb.ToString()); } var typeDef = module.Assembly.Find(m_Script.m_Namespace != "" ? $"{m_Script.m_Namespace}.{m_Script.m_ClassName}" : m_Script.m_ClassName, false); if (typeDef != null) { try { DumpType(typeDef.ToTypeSig(), sb, assetPreloadData.sourceFile, null, -1, true); } catch { sb = new StringBuilder(); sb.AppendLine("PPtr<GameObject> m_GameObject"); sb.AppendLine($"\tint m_FileID = {m_MonoBehaviour.m_GameObject.m_FileID}"); sb.AppendLine($"\tint64 m_PathID = {m_MonoBehaviour.m_GameObject.m_PathID}"); sb.AppendLine($"UInt8 m_Enabled = {m_MonoBehaviour.m_Enabled}"); sb.AppendLine("PPtr<MonoScript> m_Script"); sb.AppendLine($"\tint m_FileID = {m_MonoBehaviour.m_Script.m_FileID}"); sb.AppendLine($"\tint64 m_PathID = {m_MonoBehaviour.m_Script.m_PathID}"); sb.AppendLine($"string m_Name = \"{m_MonoBehaviour.m_Name}\""); } } } return(sb.ToString()); }