Hello Evain,
Thanks for your info, today i have test about 7 EXE , they all the
same, and notice that we cannot delete these classes, so if you test
on any EXE with the code above , the result should be the same.
Here is the stack trace
++++++++++++++++++++++++++++
Mono.Cecil.dll!
Mono.Cecil.MetadataBuilder.LookupToken(Mono.Cecil.IMetadataTokenProvider
provider = null) + 0x75 bytes
Mono.Cecil.dll!
Mono.Cecil.Cil.CodeReader.PatchRawCode(Mono.Cecil.PE.ByteBuffer buffer
= {Mono.Cecil.PE.ByteBuffer}, int code_size = 15,
Mono.Cecil.Cil.CodeWriter writer = {Mono.Cecil.Cil.CodeWriter}) +
0x3b7 bytes
Mono.Cecil.dll!
Mono.Cecil.Cil.CodeReader.PatchRawFatMethod(Mono.Cecil.PE.ByteBuffer
buffer = {Mono.Cecil.PE.ByteBuffer}, Mono.Cecil.Cil.MethodSymbols
symbols = {Mono.Cecil.Cil.MethodSymbols}, Mono.Cecil.Cil.CodeWriter
writer = {Mono.Cecil.Cil.CodeWriter}, out Mono.Cecil.MetadataToken
local_var_token = {[Signature:0x0002]}) + 0x1c1 bytes
Mono.Cecil.dll!
Mono.Cecil.Cil.CodeReader.PatchRawMethodBody(Mono.Cecil.MethodDefinition
method = {System.Void
test.Form1::button2_Click(System.Object,System.EventArgs)},
Mono.Cecil.Cil.CodeWriter writer = {Mono.Cecil.Cil.CodeWriter}, out
Mono.Cecil.Cil.MethodSymbols symbols = {Mono.Cecil.Cil.MethodSymbols})
+ 0x16f bytes
Mono.Cecil.dll!
Mono.Cecil.Cil.CodeWriter.WriteUnresolvedMethodBody(Mono.Cecil.MethodDefinition
method = {System.Void
test.Form1::button2_Click(System.Object,System.EventArgs)}) + 0xe3
bytes
Mono.Cecil.dll!
Mono.Cecil.Cil.CodeWriter.WriteMethodBody(Mono.Cecil.MethodDefinition
method = {System.Void
test.Form1::button2_Click(System.Object,System.EventArgs)}) + 0x9d
bytes
Mono.Cecil.dll!
Mono.Cecil.MetadataBuilder.AddMethod(Mono.Cecil.MethodDefinition
method = {System.Void
test.Form1::button2_Click(System.Object,System.EventArgs)}) + 0x82
bytes
Mono.Cecil.dll!
Mono.Cecil.MetadataBuilder.AddMethods(Mono.Cecil.TypeDefinition type =
{test.Form1}) + 0x80 bytes
Mono.Cecil.dll!
Mono.Cecil.MetadataBuilder.AddType(Mono.Cecil.TypeDefinition type =
{test.Form1}) + 0x22e bytes
Mono.Cecil.dll!Mono.Cecil.MetadataBuilder.AddTypeDefs() + 0x80
bytes
Mono.Cecil.dll!Mono.Cecil.MetadataBuilder.BuildTypes() + 0x68 bytes
Mono.Cecil.dll!Mono.Cecil.MetadataBuilder.BuildModule() + 0x179
bytes
Mono.Cecil.dll!Mono.Cecil.MetadataBuilder.BuildMetadata() + 0x2d
bytes
Mono.Cecil.dll!
Mono.Cecil.ModuleWriter.BuildMetadata.AnonymousMethod(Mono.Cecil.MetadataBuilder
builder = {Mono.Cecil.MetadataBuilder}, Mono.Cecil.MetadataReader _ =
{Mono.Cecil.MetadataReader}) + 0x42 bytes
Mono.Cecil.dll!
Mono.Cecil.ModuleDefinition.Read<Mono.Cecil.MetadataBuilder,Mono.Cecil.MetadataBuilder>(Mono.Cecil.MetadataBuilder
item = {Mono.Cecil.MetadataBuilder},
Mono.Func<Mono.Cecil.MetadataBuilder,Mono.Cecil.MetadataReader,Mono.Cecil.MetadataBuilder>
read = {Method = {Mono.Cecil.MetadataBuilder
<BuildMetadata>b__0(Mono.Cecil.MetadataBuilder,
Mono.Cecil.MetadataReader)}}) + 0x79 bytes
Mono.Cecil.dll!
Mono.Cecil.ModuleWriter.BuildMetadata(Mono.Cecil.ModuleDefinition
module = {test.exe}, Mono.Cecil.MetadataBuilder metadata =
{Mono.Cecil.MetadataBuilder}) + 0xda bytes
Mono.Cecil.dll!
Mono.Cecil.ModuleWriter.WriteModuleTo(Mono.Cecil.ModuleDefinition
module = {test.exe}, System.IO.Stream stream = {System.IO.FileStream},
Mono.Cecil.WriterParameters parameters =
{Mono.Cecil.WriterParameters}) + 0x2db bytes
Mono.Cecil.dll!Mono.Cecil.ModuleDefinition.Write(System.IO.Stream
stream = {System.IO.FileStream}, Mono.Cecil.WriterParameters
parameters = {Mono.Cecil.WriterParameters}) + 0xaf bytes
Mono.Cecil.dll!Mono.Cecil.ModuleDefinition.Write(string fileName =
"ccc.exe", Mono.Cecil.WriterParameters parameters =
{Mono.Cecil.WriterParameters}) + 0x68 bytes
Mono.Cecil.dll!Mono.Cecil.ModuleDefinition.Write(string fileName =
"ccc.exe") + 0x4b bytes
cecil.exe!cecil.Form1.button3_Click(object sender = {Text =
"button3"}, System.EventArgs e = {X = 49 Y = 13 Button = Left}) Line
112 + 0x10 bytes C#
System.Windows.Forms.dll!
System.Windows.Forms.Control.OnClick(System.EventArgs e) Line 8414 C#
System.Windows.Forms.dll!
System.Windows.Forms.Button.OnClick(System.EventArgs e) Line 279 C#
System.Windows.Forms.dll!
System.Windows.Forms.Button.OnMouseUp(System.Windows.Forms.MouseEventArgs
mevent = {X = 49 Y = 13 Button = Left}) Line 308 C#
System.Windows.Forms.dll!System.Windows.Forms.Control.WmMouseUp(ref
System.Windows.Forms.Message m, System.Windows.Forms.MouseButtons
button, int clicks) Line 13042 + 0x2a5 bytes C#
System.Windows.Forms.dll!System.Windows.Forms.Control.WndProc(ref
System.Windows.Forms.Message m) Line 13772 C#
System.Windows.Forms.dll!System.Windows.Forms.ButtonBase.WndProc(ref
System.Windows.Forms.Message m) Line 1306 + 0x9 bytes C#
> System.Windows.Forms.dll!System.Windows.Forms.Button.WndProc(ref
> System.Windows.Forms.Message m) Line 400 C#
System.Windows.Forms.dll!
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(ref
System.Windows.Forms.Message m) Line 14059 C#
System.Windows.Forms.dll!
System.Windows.Forms.Control.ControlNativeWindow.WndProc(ref
System.Windows.Forms.Message m) Line 14114 C#
System.Windows.Forms.dll!
System.Windows.Forms.NativeWindow.DebuggableCallback(System.IntPtr
hWnd, int msg = 514, System.IntPtr wparam, System.IntPtr lparam) Line
777 + 0xa bytes C#
[Native to Managed Transition]
[Managed to Native Transition]
System.Windows.Forms.dll!
System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(int
dwComponentID, int reason = -1, int pvLoopData = 0) Line 2106 + 0x8
bytes C#
System.Windows.Forms.dll!
System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(int
reason = -1, System.Windows.Forms.ApplicationContext context =
{System.Windows.Forms.ApplicationContext}) Line 3377 + 0x1b bytes C#
System.Windows.Forms.dll!
System.Windows.Forms.Application.ThreadContext.RunMessageLoop(int
reason, System.Windows.Forms.ApplicationContext context) Line 3261 +
0xc bytes C#
System.Windows.Forms.dll!
System.Windows.Forms.Application.Run(System.Windows.Forms.Form
mainForm) Line 1466 C#
cecil.exe!cecil.Program.Main() Line 18 + 0x1e bytes C#
[Native to Managed Transition]
[Managed to Native Transition]
mscorlib.dll!System.AppDomain.ExecuteAssembly(string assemblyFile,
System.Security.Policy.Evidence assemblySecurity, string[] args) Line
931 + 0x1f bytes C#
Microsoft.VisualStudio.HostingProcess.Utilities.dll!
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() +
0x2b bytes
mscorlib.dll!
System.Threading.ThreadHelper.ThreadStart_Context(object state) Line
55 + 0x29 bytes C#
mscorlib.dll!
System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext
executionContext, System.Threading.ContextCallback callback, object
state) Line 355 + 0xd bytes C#
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() Line 82 +
0x21 bytes C#
++++++++++++++++++++++++++++++++++++++
and EXCEPTION
+++++++++++++++++++++++++++++++++++++
************** Exception Text **************
System.ArgumentNullException: Value cannot be null.
at Mono.Cecil.MetadataBuilder.LookupToken(IMetadataTokenProvider
provider)
at Mono.Cecil.Cil.CodeReader.PatchRawCode(ByteBuffer buffer, Int32
code_size, CodeWriter writer)
at Mono.Cecil.Cil.CodeReader.PatchRawFatMethod(ByteBuffer buffer,
MethodSymbols symbols, CodeWriter writer, MetadataToken&
local_var_token)
at Mono.Cecil.Cil.CodeReader.PatchRawMethodBody(MethodDefinition
method, CodeWriter writer, MethodSymbols& symbols)
at
Mono.Cecil.Cil.CodeWriter.WriteUnresolvedMethodBody(MethodDefinition
method)
at Mono.Cecil.Cil.CodeWriter.WriteMethodBody(MethodDefinition
method)
at Mono.Cecil.MetadataBuilder.AddMethod(MethodDefinition method)
at Mono.Cecil.MetadataBuilder.AddMethods(TypeDefinition type)
at Mono.Cecil.MetadataBuilder.AddType(TypeDefinition type)
at Mono.Cecil.MetadataBuilder.AddTypeDefs()
at Mono.Cecil.MetadataBuilder.BuildTypes()
at Mono.Cecil.MetadataBuilder.BuildModule()
at Mono.Cecil.MetadataBuilder.BuildMetadata()
at Mono.Cecil.ModuleWriter.<BuildMetadata>b__0(MetadataBuilder
builder, MetadataReader _)
at Mono.Cecil.ModuleDefinition.Read[TItem,TRet](TItem item, Func`3
read)
at Mono.Cecil.ModuleWriter.BuildMetadata(ModuleDefinition module,
MetadataBuilder metadata)
at Mono.Cecil.ModuleWriter.WriteModuleTo(ModuleDefinition module,
Stream stream, WriterParameters parameters)
at Mono.Cecil.ModuleDefinition.Write(Stream stream,
WriterParameters parameters)
at Mono.Cecil.ModuleDefinition.Write(String fileName,
WriterParameters parameters)
at Mono.Cecil.ModuleDefinition.Write(String fileName)
at cecil.Form1.button3_Click(Object sender, EventArgs e) in C:\Users
\Visual Studio 2008\Projects\ceciltest\ceciltest\Form1.cs:line 112
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons
button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at
System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32
msg, IntPtr wparam, IntPtr lparam)
+++++++++++++++++++++++++++++++++++++++++
Many Thanks
On Jun 18, 10:36 pm, Jb Evain <[email protected]> wrote:
> On Fri, Jun 18, 2010 at 9:52 PM, david khan <[email protected]> wrote:
> > Hello Evain,
>
> Hello Khan,
>
> > I can delete type test.Form2, test.Program etc but why i cannot delete
> > Form1 , there is exception thrown nullreference when
> > asm.Write("ccc.exe");
>
> Two things here.
>
> First, Cecil should not throw a NullReferenceException, could you
> paste the full stacktrace?
> Second, it probably means that you're removing something blindly that
> is used elsewhere.
>
> --
> Jb Evain <[email protected]>
--
--
mono-cecil