我试图通过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:\
感谢您的帮助!
答案 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)
call
b)没有instance
System.Windows.Forms
,而不是mscorlib
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#中,那很好用!