2010-05-26 2 views
2

Я пытаюсь модифицировать сборку (мою) только путем ее сборки и изменения кода MSIL. Я просто хочу выпустить MessageBox.Проблема с кодом MSIL

Вот мой код:

.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 не появляется: \

Спасибо за помощь!

ответ

6

должен быть

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

Кстати, MessageBox не должны работать в веб-приложение, поскольку он взаимодействует с настольным пользователем

, что случилось с вашим кодом:

callvirt instance [mscorlib]System.Windows.Forms.MessageBox::Show(string) 
  1. Показать является статическим методом.Так оно и должно быть названо) с call б) без instance
  2. MessageBox в System.Windows.Forms, а не в mscorlib
  3. Вы должны указать тип результата, это на самом деле DialogResult
  4. Вы должны pop результат, потому что вам не нужно it
+0

Нет :(Я точно знаю, что это приложение .net.net (file.aspx) – Thomas

1

Well MessageBox - это функция формы окна в System.Windows.Forms.dll, поэтому вам нужно будет добавить extern для этого и удалить бит [mscorlib] ... но я не думаю это поможет.

Как выглядит страница ASPX для создания окна сообщений Winforms? Единственное, что вы могли бы сделать, это исправить предупреждение (сообщение) Javascript, чтобы получить окно сообщения стиля веб-страницы, но это не будет легко сделано, изменив 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 
0

Ok спасибо за помощь, это более ясно Теперь.

Ну, если невозможно создать MessageBox из aspx-файла, я попытался написать что-то в файле.

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 

У меня нет ошибки или исключения, когда я загрузить веб-страницу, но файл не будет создан или изменен: \

Я не понимаю, почему, потому что если я ставлю тот же код в C# непосредственно в .aspx, это прекрасно работает!

+0

использовать http://msdn.microsoft.com/en-us/library/ms143356(VS.90).aspx – Andrey

Смежные вопросы