我正在创建自己的程序,通过dnlib更改.exe代码。
然后,我想通过IL和Dnlib代码创建一个字典。
但这两本教程都不多,所以很难。
它编写错误的字典代码并使DnSpy崩溃。
我的代码:
MethodDef cctor = Module.GlobalType.FindOrCreateStaticConstructor();
IList<Instruction> inst = cctor.Body.Instructions;
var objectCtor = new MemberRefUser(Module, ".ctor",
MethodSig.CreateInstance(Module.CorLibTypes.Void),
Module.CorLibTypes.Object.TypeDefOrRef);
var Global_Array = new FieldDefUser(
"field_obfuscator_array",
new FieldSig(Module.CorLibTypes.GetCorLibTypeSig(,
FieldAttributes.Public | FieldAttributes.Static);
Module.GlobalType.Fields.Add(Global_Array);
if (inst.Count < 1)
inst.Add(new Instruction(OpCodes.Ret));
inst.Insert(0, new Instruction(OpCodes.Ldc_I4, 100000));
inst.Insert(1, new Instruction(OpCodes.Newobj, "[mscorlib]System.Collections.Generic.Dictionary`2"));
inst.Insert(2, new Instruction(OpCodes.Stsfld, Global_Array));任何帮助都是非常感谢的,谢谢!
发布于 2022-10-30 20:22:17
最简单的方法是用C#编写这个实现,然后把它放到反编译器中(例如,在这种情况下或者其他情况下不重要--只需要有IL代码读取器)。
有三种方法可以做到这一点:
C# -> IL或点击打开用鼠标右键,这里!
edit method body,完成!在此之后,您可以通过dnlib编写相同的IL代码,也可以在dn间谍中编写。

Importer加载它(执行您的魔术-导入此方法,很多示例都是正确的这里)dnlib的示例代码如何完成:
var externalComponentsImporter = new Importer(externalComponentsModuleDefMD, ImporterOptions.TryToUseDefs);
var redirectStubMethodDef = externalComponentsImporter.Import(typeof(Hooking).GetMethod(nameof(Hooking.RedirectStub), BindingFlags.Public | BindingFlags.Static)).ResolveMethodDefThrow();
// Play around with ImporterOptions enumhttps://stackoverflow.com/questions/48477012
复制相似问题