using System; using System.IO; using System.Linq; using System.Reflection; using System.Reflection.Metadata; using System.Reflection.PortableExecutable; string path = "/home/dazed/.local/share/Steam/steamapps/common/worldbox/worldbox_Data/Managed/Assembly-CSharp.dll"; using var fs = File.OpenRead(path); using var pe = new PEReader(fs); var md = pe.GetMetadataReader(); foreach (var typeName in new[]{"Plot","PlotAsset","PlotManager","PlotState"}) { Console.WriteLine("== "+typeName+" =="); foreach (var th in md.TypeDefinitions) { var t = md.GetTypeDefinition(th); if (md.GetString(t.Name)!=typeName) continue; Console.WriteLine(" [fields]"); foreach (var fh in t.GetFields()) { var f = md.GetFieldDefinition(fh); var n = md.GetString(f.Name); if (n.StartsWith("<")) continue; Console.WriteLine(" field "+n); } Console.WriteLine(" [methods]"); foreach (var mh in t.GetMethods()) { var m = md.GetMethodDefinition(mh); var n = md.GetString(m.Name); if (n is ".ctor" or ".cctor") continue; var attrs = m.Attributes; bool pub = (attrs & MethodAttributes.Public) != 0; if (!pub && !n.StartsWith("get_") && !n.StartsWith("set_")) continue; Console.WriteLine(" method "+n+" pub="+pub); } Console.WriteLine(" [props via get_]"); foreach (var mh in t.GetMethods()) { var m = md.GetMethodDefinition(mh); var n = md.GetString(m.Name); if (n.StartsWith("get_")) Console.WriteLine(" "+n.Substring(4)); } } }