gpt4 book ai didi

c# - 静态构造函数创建 [Mono.Cecil]

转载 作者:可可西里 更新时间:2023-11-01 08:11:30 27 4
gpt4 key购买 nike

我的项目中的静态构造函数一直存在一些问题。我需要向类型“”添加一个静态构造函数,以便调用我的资源解密方法。

在下面的 gif 中,您会看到我遇到的问题。

我还将包含代码片段。 enter image description here

创建cctor的代码:

MethodDefinition method = new MethodDefinition(
".cctor",
Mono.Cecil.MethodAttributes.Private
| Mono.Cecil.MethodAttributes.Static
| Mono.Cecil.MethodAttributes.HideBySig
| Mono.Cecil.MethodAttributes.SpecialName
| Mono.Cecil.MethodAttributes.RTSpecialName,
mod.Import(typeof(void))
);

我也尝试过将属性更改为与 Yano 的完全相同。它不知何故永远行不通。 “工作”是指在 DotNet Resolver 中将其检测为静态构造函数。

这里有一些关于实际结果和预期结果的更多信息。

enter image description here

我的入口点没有附加 ResolveEventHandler。我将它附加到应用程序,该应用程序正在被混淆,它位于 ""类型的静态构造函数中,该构造函数甚至在调用入口点之前就已执行。

应用程序资源已使用 AES 加密,并且不会被 dotnet 解析器或其他反编译器识别为有效资源。我只是问为什么没有触发事件,因为它应该在资源无效或丢失时触发。正如您在示例中看到的那样,在应用程序启动之前应该弹出一个消息框,但它从来没有弹出(字符串加密对字符串进行加密,因此很难看到那里有一个字符串)。

感谢任何帮助。

最佳答案

使用这个:

void AddConstructor(TypeDefinition type, MethodReference baseEmptyConstructor)
{
var methodAttributes = MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName;
var method = new MethodDefinition(".ctor", methodAttributes, ModuleDefinition.TypeSystem.Void);
method.Body.Instructions.Add(Instruction.Create(OpCodes.Ldarg_0));
method.Body.Instructions.Add(Instruction.Create(OpCodes.Call, baseEmptyConstructor));
method.Body.Instructions.Add(Instruction.Create(OpCodes.Ret));
type.Methods.Add(method);
}

你也可以引用:

http://www.mono-project.com/Cecil:FAQ

关于c# - 静态构造函数创建 [Mono.Cecil],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20732020/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com