zoukankan      html  css  js  c++  java
  • IL 汇编学习笔记(四)

    原文:http://www.codeproject.com/dotnet/ilassembly.asp

    创建 Windows Form 程序


    下列代码给出一个简单的例子,其中简单的设定了窗体的一些属性,BackColor, Text 和 WindowState.

    .namespace MyForm
    {
      .
    class public TestForm extends
           [System.Windows.Forms]System.Windows.Forms.Form
      {
        .field 
    private class [System]System.ComponentModel.IContainer components
        .method 
    public static void Main() cil managed
        {
          .entrypoint
          .maxstack  
    1
                
          
    //Create New Object of TestForm Class and Call the Constructor     
          newobj     instance void MyForm.TestForm::.ctor()
          call       
    void [System.Windows.Forms]
              System.Windows.Forms.Application::Run(
              
    class [System.Windows.Forms]System.Windows.Forms.Form)
          ret
        }


    这段代码里,我们看到,在 Main() 函数里通过调用 Application.Run 方法来 launch 了这个窗体程序。

    以下是其构造器的定义:

        .method public specialname rtspecialname instance
            
    void  .ctor() cil managed
        {     
          .maxstack  
    4
                
          ldarg.
    0
          
    // 调用基类的构造器
          call       instance void [System.Windows.Forms]
                            System.Windows.Forms.Form::.ctor()
          
          
    //Initialize the Components
          ldarg.0
          newobj   instance 
    void [System]System.ComponentModel.Container::.ctor()
          stfld    
    class [System]System.ComponentModel.IContainer
                            MyForm.TestForm::components

          
    //Set the Title of the Window (Form)
          ldarg.0
          ldstr      
    "This is the Title of the Form."
          call   instance 
    void [System.Windows.Forms]
                           System.Windows.Forms.Control::set_Text(
    string)
          
          
    //Set the Back Color of the Form
          ldarg.0
          ldc.i4 
    0xff
          ldc.i4 
    0
          ldc.i4 
    0
          call valuetype [System.Drawing]System.Drawing.Color
                         [System.Drawing]System.Drawing.Color::FromArgb(
                         int32, int32, int32)

          call   instance 
    void [System.Windows.Forms]
                         System.Windows.Forms.Control::set_BackColor(
                         valuetype [System.Drawing]System.Drawing.Color)
          
          
          
    //Maximize the Form using WindowState Property
          ldarg.0
          ldc.i4 
    2        //2 for Maximize
          call instance void [System.Windows.Forms]
                         System.Windows.Forms.Form::set_WindowState(
                         valuetype [System.Windows.Forms]
                         System.Windows.Forms.FormWindowState)
          ret
        }


    这段代码非常简单,不需要太多解释。注意其中首先需要去手工调用基类的构造器,另一点就是,枚举的初始化只需要简单的赋一个整数值就可以了。

    我们还可以给这个窗体定义一个 Dispose 方法如下:

        .method family virtual instance void Dispose(bool disposing) cil managed
        {
          .maxstack  
    2

          ldarg.
    0
          ldfld      
    class [System]System.ComponentModel.IContainer
                       MyForm.TestForm::components
          callvirt   instance 
    void [mscorlib]System.IDisposable::Dispose()
            
            
    //Call Base Class's Dispose Event
          ldarg.0
          ldarg.
    1
          call       instance 
    void [System.Windows.Forms]
                        System.Windows.Forms.Form::Dispose(
    bool)
          ret
        }


    错误处理和调试

    下面会介绍一些常见的调试方法。
    首先,我们可以在编译 IL 代码的时候生成调试信息:

    ILAsm.exe Test.il /debug

    这个命令除了生成 Test.exe,还会生成一个 Test.pdb, 其中包含调试信息。

    peverify.exe test.exe

    这个命令可以检查 PE 文件中的错误。

    ILDasm.exe 用于反汇编 exe 为 IL 代码。如果要输出,可以这样:

    ILDasm.exe SomeProject.exe /out:SomeProject.il

    其他还有一些很有用的工具,如 DbgClr.exe, CorDbg.exe

  • 相关阅读:
    mysql常用语句集锦
    PHP 面向对象
    PHP 数组
    PHP 语句 函数 字符串处理
    PHP 随笔
    mysql常用函数
    数据库 创建 查询 练习
    HTML JavaScript语法练习
    HTML JavaScript练习
    随机数生成的简单原理
  • 原文地址:https://www.cnblogs.com/RChen/p/367378.html
Copyright © 2011-2022 走看看