有人可以发布一个使用dnlib插入对MessageBox.Show()的调用的示例吗?我已经尝试了数周,并且没有在线示例。这是我现在拥有的代码:
string r = "";
foreach (Instruction i in method.Body.Instructions)
{
r += i.ToString() + "\r\n";
}
r += "\r\n\r\n\r\n\r\n";
method.Body.Instructions.Clear();
method.Body.Instructions.Add(dnlib.DotNet.Emit.OpCodes.Nop.ToInstruction());
method.Body.Instructions.Add(dnlib.DotNet.Emit.OpCodes.Ldstr.ToInstruction("changed method here!"));
method.Body.Instructions.Add(dnlib.DotNet.Emit.OpCodes.Call.ToInstruction(GetSystemMethod(typeof(MessageBox), "Show", new Type[] { typeof(string)})));
method.Body.Instructions.Add(dnlib.DotNet.Emit.OpCodes.Pop.ToInstruction());
method.Body.Instructions.Add(dnlib.DotNet.Emit.OpCodes.Ret.ToInstruction());
method.Body.UpdateInstructionOffsets();
foreach(Instruction i in method.Body.Instructions)
{
r += i.ToString() + "\r\n";
}
MessageBox.Show(r);
module.Write(Path.GetDirectoryName(file) + "\\protected-" + Path.GetFileName(file));
这是它打印的消息:
第一个块是原始的工作方法。如您所见,除了加载的字符串之外,其他所有内容都是相同的。
这是在尝试编写模块时发生的异常:
dnlib.DotNet.Writer.ModuleWriterException: 'Method System.Windows.Forms.DialogResult System.Windows.Forms.MessageBox::Show(System.String) (06002BF5) is not defined in this module (TestProj.exe). A method was removed that is still referenced by this module.'
您能解释一下我做错了什么吗,或者如何正确插入消息框?我感到奇怪的是,互联网上没有任何这样的基本功能的例子。
在此先感谢您的帮助!