gpt4 book ai didi

de4dot - 设置 CilBody.KeepOldMaxStack 或 MetadataOptions.Flags

转载 作者:行者123 更新时间:2023-12-04 04:22:07 26 4
gpt4 key购买 nike

使用 de4dot 反编译 .net 程序集时,我在控制台中收到以下消息:

Error calculating max stack value. If the method's obfuscated, set CilBody.KeepOldMaxStack or MetadataOptions.Flags (KeepOldMaxStack, global option) to ignore this error



如何设置 CilBody.KeepOldMaxStack 或 MetadataOptions.Flags?

最佳答案

也许有点晚了,但我今天遇到了同样的问题,在寻找解决方案的同时找到了您的悬而未决的问题,这就是我解决它的方式 - 我希望它也适用于您:

// Working with an assembly definition
var ass = AssemblyDef.Load("filename.dll");

// Do whatever you want to do with dnLib here

// Create global module writer options
var options = new ModuleWriterOptions(ass.Modules[0]);
options.MetadataOptions.Flags |= MetadataFlags.KeepOldMaxStack;

// Write the new assembly using the global writer options
ass.Write("newfilename.dll", options);
如果您只想在写入之前为产生问题的选择方法设置标志,例如:
// Find the type in the first module, then find the method to set the flag for
ass.Modules[0]
.Types.First((type) => type.Name == nameof(TypeToFind))
.FindMethod(nameof(MethodToFind))
.KeepOldMaxStack = true;
CilBody 可能有点令人困惑,如果您不太深入了解内部 .NET 程序集结构:它仅表示在编写修改后的程序集时产生问题的方法的主体对象。混淆器经常试图通过产生无效结构来混淆反汇编器,这可能会导致在使用 dnLib 编写程序集之前计算 maxstack 值时出现问题。通过保留原始的 maxstack 值,您可以跳过那些无效的方法结构。
在 de4dot 的上下文中,它似乎是一个错误,或者该应用程序根本不是为了解决混淆程序集的无效方法结构而设计的 - 在这种情况下,如果 de4net 开发人员不修复/实现它,则没有适合您的解决方案,并且您不想使用来自 GitHub 的源代码编写补丁。

关于de4dot - 设置 CilBody.KeepOldMaxStack 或 MetadataOptions.Flags,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58926381/

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