42 lines
1.5 KiB
C#
42 lines
1.5 KiB
C#
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));
|
|
}
|
|
}
|
|
}
|