IL汇编语言做一个窗体

news2024/11/26 20:23:01

网上看到一段代码,

.assembly extern

mscorlib {} .assembly Classes

{ .ver 1:0:1:0    } 

.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
        }
    }
}

似乎是做一个窗体出来;拿去构建一下,没什么效果;光有这一段应该是还不能做出窗体;

用VS做一个窗体exe,然后ildasm,加/text参数,获取全部的il代码保存下来;

看一下代码相当多;

逐步的删除一些,只要先构建通过,运行出现一个窗体即可;

资源相关的删掉;

.assembly test { ... } 整个这一段删掉;

 

可以构建成功,但是运行窗体不会出现;那保留这一段;

 

dispose删掉,销毁先不管;

 

资源Resource相关的删掉,应该没什么资源,

 

Culture相关的删掉,不知道是什么,

 

Settings相关的删掉,一个窗体没有用到,

 

一直删到这里,

 

下面看上去是Properties里有个Resources类,删掉,

 

.assembly test { ... } 里面看一下,版权和版本相关的删掉,

 

 

 到此剩下的代码如下,



.assembly extern System.Windows.Forms
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 4:0:0:0
}
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 4:0:0:0
}
.assembly extern System
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 4:0:0:0
}
.assembly test
{
  .custom instance void [mscorlib]System.Reflection.AssemblyDescriptionAttribute::.ctor(string) = ( 01 00 00 00 00 )
  .custom instance void [mscorlib]System.Reflection.AssemblyConfigurationAttribute::.ctor(string) = ( 01 00 00 00 00 )
  .custom instance void [mscorlib]System.Reflection.AssemblyCompanyAttribute::.ctor(string) = ( 01 00 00 00 00 )


  .custom instance void [mscorlib]System.Reflection.AssemblyTitleAttribute::.ctor(string) = ( 01 00 04 74 65 73 74 00 00 )                      // ...test..
  .custom instance void [mscorlib]System.Runtime.InteropServices.ComVisibleAttribute::.ctor(bool) = ( 01 00 00 00 00 )
  .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
  .custom instance void [mscorlib]System.Reflection.AssemblyProductAttribute::.ctor(string) = ( 01 00 04 74 65 73 74 00 00 )                      // ...test..
  .custom instance void [mscorlib]System.Reflection.AssemblyTrademarkAttribute::.ctor(string) = ( 01 00 00 00 00 )

  .hash algorithm 0x00008004
  .ver 1:0:0:0
}

.module test.exe
// MVID: {AC8E5C6C-7768-4BFE-9524-E94CA472F376}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0002       // WINDOWS_GUI
.corflags 0x00020003    //  ILONLY 32BITREQUIRED
// Image base: 0x02460000


// =============== CLASS MEMBERS DECLARATION ===================

.class public auto ansi beforefieldinit test.Form1
       extends [System.Windows.Forms]System.Windows.Forms.Form
{
  .field private class [System]System.ComponentModel.IContainer components
  .method public hidebysig specialname rtspecialname
          instance void  .ctor() cil managed
  {
    // Code size       24 (0x18)
    .maxstack  8
    IL_0000:  ldarg.0
    IL_0001:  ldnull
    IL_0002:  stfld      class [System]System.ComponentModel.IContainer test.Form1::components
    IL_0007:  ldarg.0
    IL_0008:  call       instance void [System.Windows.Forms]System.Windows.Forms.Form::.ctor()
    IL_000d:  nop
    IL_000e:  nop
    IL_000f:  ldarg.0
    IL_0010:  call       instance void test.Form1::InitializeComponent()
    IL_0015:  nop
    IL_0016:  nop
    IL_0017:  ret
  } // end of method Form1::.ctor



  .method private hidebysig instance void
          InitializeComponent() cil managed
  {
    // Code size       33 (0x21)
    .maxstack  8
    IL_0000:  nop
    IL_0001:  ldarg.0
    IL_0002:  newobj     instance void [System]System.ComponentModel.Container::.ctor()
    IL_0007:  stfld      class [System]System.ComponentModel.IContainer test.Form1::components
    IL_000c:  ldarg.0
    IL_000d:  ldc.i4.1
    IL_000e:  call       instance void [System.Windows.Forms]System.Windows.Forms.ContainerControl::set_AutoScaleMode(valuetype [System.Windows.Forms]System.Windows.Forms.AutoScaleMode)
    IL_0013:  nop
    IL_0014:  ldarg.0
    IL_0015:  ldstr      "Form1"
    IL_001a:  callvirt   instance void [System.Windows.Forms]System.Windows.Forms.Control::set_Text(string)
    IL_001f:  nop
    IL_0020:  ret
  } // end of method Form1::InitializeComponent

} // end of class test.Form1

.class private abstract auto ansi sealed beforefieldinit test.Program
       extends [mscorlib]System.Object
{
  .method private hidebysig static void  Main() cil managed
  {
    .entrypoint
    .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 )
    // Code size       26 (0x1a)
    .maxstack  8
    IL_0000:  nop
    IL_0001:  call       void [System.Windows.Forms]System.Windows.Forms.Application::EnableVisualStyles()
    IL_0006:  nop
    IL_0007:  ldc.i4.0
    IL_0008:  call       void [System.Windows.Forms]System.Windows.Forms.Application::SetCompatibleTextRenderingDefault(bool)
    IL_000d:  nop
    IL_000e:  newobj     instance void test.Form1::.ctor()
    IL_0013:  call       void [System.Windows.Forms]System.Windows.Forms.Application::Run(class [System.Windows.Forms]System.Windows.Forms.Form)
    IL_0018:  nop
    IL_0019:  ret
  } // end of method Program::Main

} // end of class test.Program

ilasm一下,可以构建成功并运行出现一个窗体;下回继续;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/872380.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言快速回顾(二)

前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》,结合我自己的工作学习经历,我准备写一个音视频系列blog。C/C是音视频必…

房屋中介系统springboot框架jsp房产信息管理java源代码

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 房屋中介系统springboot框架 系统有1权限&#xff1a…

SAP MM学习笔记19- SAP中的库存处理 单纯的退货,交货不足和过量交货

下面这篇文章讲了 SAP中的库存类型。本篇讲一些库存处理场景。 SAP MM学习笔记19- SAP中的库存类型,以及 保留在库的利用场景_东京老树根的博客-CSDN博客 1,单纯的退货 收货之后发现不合格货物,然后就想退货。而且退货之后不想再要了&#…

RES 系列 GRES: Generalized Referring Expression Segmentation 论文阅读笔记

RES 系列 GRES: Generalized Referring Expression Segmentation 论文阅读笔记 一、Abstract二、引言三、相关工作有关的指代任务和数据集指代分割方法 四、任务设置及数据集4.1 GRES 设置RES 回顾一般化的 RES评估 4.2 gRefCOCO:一个大尺度的 GRES 数据集多目标样本…

使用腾讯云轻量服务器Matomo应用模板建网站流量统计系统

腾讯云百科分享使用腾讯云轻量应用服务器Matomo应用模板搭建网站流量统计系统,Matomo 是一款开源的网站数据统计软件,可以用于跟踪、分析您的网站的流量,同时充分保障数据安全性、隐私性。该镜像基于 CentOS 7.6 64位操作系统,已预…

Docker技术入门教程

Docker技术入门教程 一、docker概念 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后&a…

Digital thread中文术语标准化|Digital thread何时是“数字主螺纹”的意思?

文章仅供个人学习使用,请勿传播! 原文来源: 段海波 数字孪生体实验室 2021-12-30 18:22 https://mp.weixin.qq.com/s/-bgMkSewxOsjhTiagUnfsw 作者一直以来主张区分数字孪生系统和数字孪生体,进而构建系统化的数字孪生概念和术语体…

时序预测 | MATLAB实现基于BiLSTM双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于BiLSTM双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于BiLSTM双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 Matlab实现BiLST…

个人对哈希数据结构学习总结 -- 理论篇

个人对哈希数据结构学习总结 -- 理论篇 引言哈希表设计思考哈希冲突Hash Functions冲突解决开放地址法(Open Addressing)分离链表法(Separate Chaining)Two-way Chaining Dynamic Hash Tableschained Hashingextendible hashinglinear hashing说明 spiral storage 使用场景小结…

深入了解 Postman Test 校验的使用方法

Postman 是一个广泛使用的 API 开发工具,它允许开发人员测试 API 的各个方面,包括请求、响应、身份验证等等,其中最常用的功能之一就是 Test 校验。那今天就一起来看看 Postman 的 Test 校验该如何使用。 Test 校验是什么? Test…

Java中的继承

目标: 1,认识继承 Java中提供了一个关键字extends,用这个关键字,可以让一个类和另一个类建立起父子关系。 继承的特点: 子类可以继承父类的非私有成员(成员变量,成员方法)&#x…

LeetCode_04Java_88. 合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组…

第三章 图论 No.11二分图,匈牙利算法与点覆盖

文章目录 二分染色:257. 关押罪犯增广路径372. 棋盘覆盖 最小点覆盖376. 机器任务 最大独立集378. 骑士放置 最小路径点覆盖 二分染色:257. 关押罪犯 257. 关押罪犯 - AcWing题库 最大最小问题,一眼二分 答案的范围在 [ 1 , 1 e 9 ] [1, 1…

数据驱动与关键字驱动

初次接触自动化测试时,对数据驱动和关键字驱动不甚理解,觉得有点故弄玄须,不就是参数和函数其嘛!其实其也体现了测试所不同与开发的一些特点(主要指系统测试),以及和对技术发展的脉络的展现。 …

MyBatisPlus通用枚举

数据库表中加一个字段sex(为int类型) 新加一个枚举的包,然后创建类的时候选择枚举类 Getter public enum SexEnum {MALE(1, "男"),FEMALE(2, "女");EnumValue//将注解标识的属性的值存储到数据库中private Integer sex;…

JZ36二叉搜索树与双向链表

题目地址:二叉搜索树与双向链表_牛客题霸_牛客网 题目回顾: 解题思路: 由题目可知,这里的二叉搜索树转成双向链表的符合左根右的逻辑顺序,且是一个递增序列。 创建两个指针,一个指向head,一个…

手把手教你,Selenium 遇见伪元素该如何处理?

问题发生 在很多前端页面中,大家会见到很多::before、::after 元素,比如【百度流量研究院】: 比如【百度疫情大数据平台】: 如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B…

NLP文本分类

NLP文本分类 落地实战五大利器!_kaiyuan_sjtu的博客-CSDN博客https://zhuanlan.zhihu.com/p/432619164 https://github.com/alibaba/EasyNLP/blob/master/README.cn.md

MySQL 索引 详解(保姆级教程)

一、索引概述 索引是帮助 MySQL 高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上…

面试热题(合并两个有序列表)

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 合并链表这类型题也是比较经典的题了,因为链表是由指针相互指向而确定位置,所以我们只需要改变某些节点的指针便可以做到对链表进行排序 今天这个方法…