了解MSIL汇编和IL汇编评估堆栈

news2025/1/16 15:06:08

.assembly extern mscorlib {}

 .assembly Test
 {
     .ver 1:0:1:0
 }
 .module test.exe
  
 .method static void main() cil managed
 {
     .maxstack 1
     .entrypoint
     
     ldstr "I am from the IL Assembly Language..."
     
     call void [mscorlib]System.Console::WriteLine (string)
     ret
 }

这是MSIL汇编的hello world程序;保存为test1.il,

拷贝到.netframework目录,然后用ilasm构建,结果如下;

先看一下main()方法中的前2条语句;

第一条指令是最大栈(.maxstack 1),它告诉编译器我们要加载到内存(实际是评估堆栈)中去的项的最大数目;
第二条,.entrypoint 指令告诉编译器去把这个函数标记为整个应用程序的入口点(Entry Point ),也就是执行这个应用程序时最先执行的函数。

上面提到评估堆栈,看一下什么是评估堆栈;

Evaluation Stack,有时翻译为评估堆栈,

Evaluation Stack
     是一个非常重要的数据结构,它在内存分配和我们的应用之间起桥梁作用,所有的计算、结果数据的移入移出都要通过它,它是一个LIFO的栈,例如我们可以用各种load指令来从其它存储区取得数据放入Evaluation Stack,可以看成是push(压栈),也可以使用各种store指令来将当前计算结果存储到相应的存储区,可以看成是pop(出栈)。
     如果方法没有返回值则要保证方法调用结束时,Evaluation Stack为空,如果有返回值则方法调用结束的时候Evaluation Stack只存该返回值,如果违反上述规则,则运行时会抛出InvalidProgramException的异常。

这是网上资料的一个图,Evaluation Stack 和其它存储区的关系如下:

我还不太理解,有时间继续; 

 

 

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

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

相关文章

spring-transaction源码分析(2)EnableTransactionManagement注解

概述(Java doc) 该注解开启spring的注解驱动事务管理功能,通常标注在Configuration类上面用于开启命令式事务管理或响应式事务管理。 Configuration EnableTransactionManagement public class AppConfig {Beanpublic FooRepository fooRepository() {// configur…

【Matter】esp-matter环境下的应用实践(程序烧录及串口监视)

文章目录 esp-matter环境下的应用实践前提准备设置环境变量1.ESP-IDF2.ESP-Matter Matter Example编译下载1.激活esp-matter环境2.选择esp设备3.编译工程4.SDK烧写 esp-matter环境下的应用实践 前提准备 请确保你本地已经配置好 esp-idf 及esp-matter环境,可参考此…

经典文献阅读之--PCAccumulation(动态三维场景构建)

0. 简介 多波束激光雷达传感器,常用于自动驾驶汽车和移动机器人,获取三维范围扫描序列(“帧”)。由于角度扫描分辨率有限和遮挡,每帧只稀疏地覆盖场景。稀疏性限制了下游过程的性能,如语义分割或表面重建。…

北京地铁:充分发挥数据价值,全面提升业财融合能力

4月19日-4月21日,一年一度的用友BIP技术大会圆满召开。来自行业领先企业的CIO/CDO、生态伙伴、开发者、分析师、媒体等共聚北京用友产业园,了解最新技术发展趋势、探讨行业热点话题。会上,北京地铁运营有限公司(以下简称“北京地铁…

shared_ptr 的线程安全性

多线程环境下,调用不同的 shared_ptr 实例的成员函数是不需要额外的同步手段的,即使这些 shared_ptr 管理的是相同的对象。 多线程对于同一个 shared_ptr 实例的读操作(访问)可以保证线程安全;但对于同一个 shared_ptr…

对标世界一流|从Just in time到Just in case ——汽车行业供应链管理经验借鉴

01 丰田汽车精益生产 作为最复杂和最成熟的供应链之一,汽车行业供应链无疑是供应链领域集大成者,而提起汽车行业供应链,就不得不提到丰田汽车;提到丰田汽车,就肯定离不开大名鼎鼎的精益生产以及JIT模式。 JIT模式由丰…

【UE】高级载具插件-05-扫描材质

效果 步骤 1. 首先创建一个材质 再创建一个材质参数集 创建材质实例 2. 将后期处理体积放入场景,并缩放至合适的大小使其全方位覆盖 在后期处理材质中添加一个数组 选择资产引用 将材质实例拖入 3. 打开参数集,添加一个数组元素 设置默认值和参数名 4. …

2023年湖北省中级职称评审申报条件是什么呢?学历不够可以申报吗?

2023年湖北省中级职称评审申报条件是什么呢?学历不够可以申报吗? 1.大专毕业从事本专业技术工作7年以上;助理满足4年。 2.本科毕业从事本专业技术工作5年以上,助理满足4年。 一般来说中专或者高中学历是无法申请中级职称的&…

mobile代码打APK包

1、安装Android SDK Android SDK 下载地址: http://www.androiddevtools.cn/ 下载位置 下载后解压 打开解压文件,点击 SDK Manager.exe 进行安装 安装组件,这要选 Android 8.0.0 或者以上版本 再次安装,发现没什么可以安装了 2…

【Linux】Shell编程之条件语句

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、条件测试操作作1.文件测试2.整数值比较3.逻辑测试 二、if语句的结构1.单分支结构2.双分支结构3.多分支结构 三、case多分支结构 一、条件测试操作作 test命令 …

Win10蓝屏错误0x0000007b怎么U盘重装系统?

Win10蓝屏错误0x0000007b怎么U盘重装系统?有用户安装好的电脑系统最近总是会出现蓝屏错误0x0000007b的情况,遇到这样的情况很多用户不懂怎么去进行处理。今天分享一个U盘重装系统的方法,教会你快速解决此问题的方法。 准备工作: 1…

体验 nanoGPT

体验 nanoGPT 1. 使用预训练模型2. 训练自己的模型2-1. 准备训练数据2-2. 模型训练2-3. 模型验证 1. 使用预训练模型 在我们尝试训练自己的模型之前,我们先使用其他人训练好的模型,看看如何在自己的环境中运行聊天机器人。 今天我们使用 GPT4ALL 并从 …

正则匹配x.x.x

\d(\.\d){2} 正则规则 \d 表示一个十进制的数字 [0-9] 匹配加号之前的一次或多次 正则中[]、()、{}的区别 [] 匹配组内任意字符 eg:[1,2,3,a-z]能匹配1、2、3、a到z的任意字符 () 相应的匹配字符串,匹配组,子表达式 eg:(abc|cbd)能匹配…

既然有Map了,为什么还要有Redis?

以下内容转自掘金 作者:哪吒编程 同样是缓存,用map不行吗? Redis可以存储几十个G的数据,Map行吗?Redis的缓存可以进行本地持久化,Map行吗?Redis可以作为分布式缓存,Map只能在同一个JVM中进行缓…

2022 Jiangsu Collegiate Programming Contest I. Cutting Suffix

题目链接 Examples input aa Output 1 input ab Output 0 题目大意: 后缀i是字符串从第i个字符开始到最后的字符字串 定义Wi,j是字符串 后缀i和后缀j的公共前缀(LCP)的长度 现在给你一个全集为1-n的互补集T1,T2 要求题目中求和公式的最小值。 题目要点:…

学习笔记(1 - 01)项目初始化的方案和对比

目录 1,创建项目的方式1.1,两种方式创建的项目比对HbuilderX创建的项目:cli创建的项目 1,创建项目的方式 uniapp提供两种方式创建项目: 通过HbuilderX编辑器创建: 通过vue-cli创建 第一方式只能通过Hbuild…

如何在Facebook上创建一个成功的广告账户?

Facebook广告已成为许多企业吸引客户和推广品牌的主要方式。但是,如果你没有经验或知识,创建一个成功的Facebook广告账户可能会变得相当棘手。在这篇文章中,我将向你介绍如何创建一个成功的Facebook广告账户。 第一步:创建Faceboo…

Lucene和Solr和Elasticsearch区别,全文检索引擎工具包Lucene索引流程和搜索流程实操

文章目录 基本概念什么是全文检索技术全文检索的应用场景搜索引擎站内搜索(关注)文件系统的搜索 Lucene & solr & es介绍区别Solr与Lucene对比ES与Lucene的区别ES与Solr对比 Lucene实现全文检索的流程入门程序需求环境准备数据库脚本初始化Lucen…

ADAS测试方案

一 方案概述 随着5G通讯与互联网的快速发展,智能汽车和ADAS辅助系统的研究与发展在世界范围内也在如火如荼地进行。风丘紧跟时代脚步,经多年积累沉淀,携手整车厂与高校共同研发打造出了一套完整且适用于国内ADAS测试的系统方案。 | ADAS测试…

C/C++每日一练(20230506) 翻转词序、字符金字塔、单词搜索

目录 1. 翻转顺序打印 ※ 2. 字符金字塔 ※ 3. 单词搜索 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 翻转顺序打印 初始化一个字符数组为"Th…