Как вставить вызов в MessageBox.Show() с помощью dnlib?

Может кто-нибудь опубликовать пример вставки вызова в MessageBox.Show() с помощью dnlib? Я пытался понять это в течение нескольких недель, и в Интернете нет примеров. Вот код, который я сейчас имею:

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.'

Можете ли вы объяснить мне, что я делаю неправильно, или как будет выглядеть правильная вставка сообщения? Я нахожу странным, что нигде в Интернете нет примеров такой базовой функциональности.

Спасибо заранее за любую помощь!

0 ответов

Другие вопросы по тегам