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

Reply via email to