MSIL代码问题

时间:2010-05-26 14:33:03

标签: .net cil

我试图通过ildassemble和修改MSIL代码来修改程序集(我的)。 我只想弹出一个MessageBox。

这是我的代码:

.module extern Fusion.dll

.module extern kernel32.dll

.module extern advapi32.dll

.module extern aspnet_state.exe

.module extern webengine.dll

.module extern aspnet_wp.exe

.module extern mscorwks.dll

.module extern ole32.dll

.module extern mscoree.dll

.module extern Netapi32.dll

.assembly extern mscorlib

{

...

...

IL_0052: ldstr "ahahahahahah"

IL_0057: callvirt instance [mscorlib]System.Windows.Forms.MessageBox::Show(string)

IL_005c: ldloc.0

IL_005d: ret

} // end of method

...

我没有错误,但没有出现MessageBox:\

感谢您的帮助!

3 个答案:

答案 0 :(得分:6)

应该是

  ldstr "ahahahahahah"
  call valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult[System.Windows.Forms]System.Windows.Forms.MessageBox::Show(string)
  pop
  ret

btw,MessageBox不应该在网络应用中运行,因为它与桌面用户互动

您的代码出了什么问题:

callvirt instance [mscorlib]System.Windows.Forms.MessageBox::Show(string)
  1. 显示是静态方法。所以它应该被称为a)call b)没有instance
  2. MessageBox位于System.Windows.Forms,而不是mscorlib
  3. 您应该指定结果类型,它实际上是DialogResult
  4. 您应该pop结果,因为您不需要它

答案 1 :(得分:1)

MessageBox是System.Windows.Forms.dll中的一个Windows窗体函数,所以你需要为它添加一个extern并删除调用[mscorlib]位...但我不认为它会有所帮助

ASPX页面如何生成Winforms消息框? 您可能做的唯一事情就是发出一个Javascript'alert(message)'来获取一个网页样式的消息框,但这不会通过修改MSIL轻松完成。

也许您应该添加以下内容:

call void [System]System.Diagnostics.Trace::Write(string)

通过反编译一个快速控制台应用程序,这就是消息框调用的工作方式:

ldstr "blah"
stloc.0 
ldloc.0 
call valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.MessageBox::Show(string)
pop 

答案 2 :(得分:0)

好的感谢您的帮助,现在更清楚了。

好吧,如果无法从aspx文件中抛出MessageBox,我试图在文件中写一些东西。

IL_0034:  ldstr      "C:\\...\\WebSite1\\toto.txt"
IL_0039:  newobj     instance void [mscorlib]System.IO.StreamWriter::.ctor(string)
IL_003e:  stloc.1
IL_003f:  ldloc.1
IL_0040:  ldstr      "hello world"
IL_0045:  callvirt   instance void [mscorlib]System.IO.TextWriter::WriteLine(string)
IL_004a:  nop
IL_004b:  ldloc.1
IL_004c:  callvirt   instance void [mscorlib]System.IO.TextWriter::Close()
IL_0051:  nop

加载网页时没有错误或异常,但未创建或修改文件:\

我不明白为什么,因为如果我直接在.aspx中将相同的代码放在C#中,那很好用!