了解IL汇编异常处理语法

从网上拷过来一个IL汇编程序,编译时先报如下错,

        看它是把空格识别为了下注红线的字符,这是字符编码的问题,用记事本替换功能替换了;

然后又报如下的错,

 

看不出来问题,拷一句正确的来,整个替换;

 

然后又报如下的错,

 

    这次一直改不了;看了一阵,只要把,

            ldstr "计算完毕, 结果为:"
            call void [mscorlib]System.Console::WriteLine(string)

    "计算完毕, 结果为:",加上冒号就可以,去掉冒号总会出上面的错,不知道是哪儿编码的问题;

然后构建好了;

 

完整的代码如下,
 

.assembly extern mscorlib {auto}
.assembly AndCount{}
.module andCount.exe
.namespace AndCount {
    .class public AndCount extends [mscorlib]System.Object{
        .method public static void AddCount() cil managed {
            .entrypoint
            .locals init (int32 retValue)
        .try{
        AskAfterNum:
            ldstr "-------------------------------------------------------\n加法载入"
            call void [mscorlib]System.Console::Write(string)
            ldstr "\n请输入第一个数字:"
            call void [mscorlib]System.Console::Write(string)
            call string [mscorlib]System.Console::ReadLine()
            call int32 [mscorlib]System.Convert::ToInt32(string)
            ldstr "\n请输入第二个数字:"
            call void [mscorlib]System.Console::Write(string)
            call string [mscorlib]System.Console::ReadLine()
            call int32 [mscorlib]System.Convert::ToInt32(string)
            add
            stloc retValue
            ldloc retValue
            brfalse Error
            ldstr "计算完毕, 结果为:"
            call void [mscorlib]System.Console::WriteLine(string)
            ldloc retValue
            br PrintCount
        Error:
            ldstr "error"
        PrintCount:
            call void [mscorlib]System.Console::WriteLine(int32)
            ldloc retValue
            brtrue AskAfterNum
            } 
           catch [mscorlib]System.Exception
            {
                pop
                ldstr "\n临时错误!\n"
                call void [mscorlib]System.Console::Write(string)
                br AskAfterNum
            }
            ret
        }
    }
}
.field public static valuetype CharArray8 Format at FormatData
.data FormatData = bytearray(25 64 00 00 00 00 00 00)
.class public explicit CharArray8
    extends [mscorlib]System.ValueType { .size 8 }
.method public static pinvokeimpl("msvcrt.dll" cdecl)
    vararg int32 sscanf(string,int8*) cil managed{ }

但是运行又会出错;不知道是哪儿的问题; 

 

 此程序包括有异常处理,先了解一下IL汇编的异常处理语法;

头部的指令,

.assembly extern mscorlib { auto } 定义了一个名为AssemblyRef的元素据项,它标识了这个程序中使用的外部托管应用程序(程序集);在这里使用的是Mscorlib.dll,这是.NET Framework类库的主程序集;

.assembly Xxxx {} 定义了一个名为Assembly(程序集)的元数据项;

.module Xxxxx.exe定义了一个名为Module(模块)的元数据项,它标识了当前的模块;

先了解一下;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[考研机试] KY20 完数VS盈数 清华大学复试上机题 C++实现

描述 一个数如果恰好等于它的各因子(该数本身除外)子和,如:6321。则称其为“完数”;若因子之和大于该数,则称其为“盈数”。 求出2到60之间所有“完数”和“盈数”。 输入描述: 题目没有任何输入。 输出描述&#…

STM32 4G学习(二)

特性参数 ATK-IDM750C是正点原子开发的一款高性能4G Cat1 DTU产品,支持移动4G、联通4G和电信4G手机卡。 它以高速率、低延迟和无线数传作为核心功能,可快速解决应用场景下的无线数传方案。 它支持TCP/UDP/HTTP/MQTT/DNS/RNDIS/NTP协议,支持…

DevOps在项目管理中的魔法:简化与深化

什么是DevOps? 定义与核心思想 DevOps, 这个名词,在技术领域中饱受瞩目。但它到底是什么?首先,DevOps并不仅仅是一个技术或者工具,它首先是一种文化,一种思想。DevOps是Development(开发&#…

Mac 安装不在 Apple 商店授权的应用程序

文章目录 一、场景介绍二、实操说明 一、场景介绍 在日常的工作生活中,发现一些好用的应用程序,但是出于某些原因,应用程序的开发者并没有将安装包上架到苹果商店。 那么这些优秀的应用程序下载安装以后就会出现如下弹框被拒之门外 二、实操…

【redis】能ping通虚拟机但是端口无法访问

问题 虚拟机上有redis,能ping通虚拟机的ip,但是idea连不上虚拟机里的redis,telnet已启动的redis6379端口失败 基本情况 虚拟机网络模式是NAT模式,linux防火墙firewalld已关闭,没有iptables,主机和虚拟机…

100% 手写代码的十九年老程序员就要被淘汰吗?

👉导读 近日,推上用户分享的一则事件引发热议。一名拥有 19 年编码经验、会 100% 手写代码的程序员 Alex 在面试中败给一位仅有 4 年经验却善用 Copilot、GPT-4 的新人 Hamid。前者因不愿拒绝使用辅助代码工具,过于追求代码可控,惨…

Redis 事务

Redis 事务 事务是指一个完整的动作,要么全部执行,要么什么也没有做。 Redis 事务不是严格意义上的事务,只是用于帮助用户在一个步骤中执行多个命令。单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性…

一生一芯1——windows与Ubuntu双系统安装

UltraISO下载 下载链接:https://pan.baidu.com/s/18ukDs6yL64qU6thYyZEo-Q?pwdo8he 提取码:o8he 一路傻瓜安装,安装后点击继续试用 Ubuntu系统下载 这里我使用的是官网的22.04版本,由于大于4G,无法上传至百度网盘…

操作指南 | 如何使用Chainlink喂价功能获取价格数据

Chainlink的去中心化预言机网络中的智能合约包含由运行商为其他智能合约(DApps)使用或截取所持续更新的实施价格数据。其中有两个主要架构:喂价和基础要求模型。此教程将会展现如何在Moonbeam、Moonriver或是Moonbase Alpha测试网上使用喂价功…

自动拆箱与装箱

自动拆箱与装箱 先进行专栏介绍自动拆箱与装箱是Java语言中一个重要的特性,它们在编程过程中起着至关重要的作用。本文将深入探讨自动拆箱与装箱的原理和相关细节。概念基本概念分析 原理自动拆箱的原理自动装箱的原理总结 注意事项代码示例 先进行专栏介绍 本专栏…

Synchronized同步锁的优化方法 待完工

Synchronized 和后来出的这个lock锁的区别 在并发编程中,多个线程访问同一个共享资源时,我们必须考虑如何维护数据的原子性。在 JDK1.5 之前,Java 是依靠 Synchronized 关键字实现锁功能来做到这点的。Synchronized 是 JVM 实现的一种内置锁…

奥威BI系统:零编程建模、开发报表,提升决策速度

奥威BI是一款非常实用的、易用、高效的商业智能工具,可以帮助企业快速获取数据、分析数据、展示数据。值得特别注意的一点是奥威BI系统支持零编程建模、开发报表,是一款人人都能用的大数据分析系统,有助于全面提升企业的数据分析挖掘效率&…

java+springboot+mysql日程管理系统

项目介绍: 使用javaspringbootmysql开发的日程管理系统,系统包含超级管理员、管理员、用户角色,功能如下: 超级管理员:管理员管理;用户管理;反馈管理;系统公告;个人信息…

SpringCloud实用篇2——Nacos配置管理 Feign远程调用 Gateway服务网关

目录 1 Nacos配置管理1.1 统一配置管理1.1.1 在nacos中添加配置文件1.1.2 从微服务拉取配置 1.2 配置热更新1.2.1 方式一1.2.2 方式二(推荐) 1.3.配置共享 2 搭建Nacos集群2.1 集群结构图2.2 搭建集群2.2.1 初始化数据库2.2.2 下载nacos2.2.3 配置Nacos2…

UDS服务基础篇之31

UDS服务基础篇之31服务 前言 正如前文《UDS基础之2F服务》所说的2F服务与今天本文要将的31服务存在着有些相似之处,因此需要针对31服务本身进行较为细致的剖析,在此小T抛出如下几个基本问题供大家思考: 你知道31服务是干什么的吗&#xff…

vue 在方法里用字符串赋值图片路径获取不到,提示找不到图片

原因 直接通过字符串赋值命名路径是不会生效的,如 this.file1"../assets/addmodel/TAR.png" 因为在Vue模板中直接使用字符串赋值的方式不会被解析为正确的资源路径。 你可以使用动态绑定(v-bind 或简写为 :)来设置图片的路径。…

Redis性能瓶颈揭秘:如何优化大key问题?

1. 什么是Redis大key问题 Redis大key问题指的是某个key对应的value值所占的内存空间比较大,导致Redis的性能下降、内存不足、数据不均衡以及主从同步延迟等问题。 到底多大的数据量才算是大key? 没有固定的判别标准,通常认为字符串类型的k…

在WebStorm中通过live-server插件搭建Ajax运行环境

1.下载node.js 官网: https://nodejs.cn/download/ 2.配置Node.js的HTTPS 使用淘宝的镜像: npm config set registry https://registry.npm.taobao.org 也可以使用cnpm npm install -g cnpm --registryhttps://registry.npm.taobao.org 配置之后可以验证是否成…

SAP SD 交货单发货过账缺料提醒 改成 弹窗框清单提醒增强

场景:零件库下销售订单100来个行项目,产生的交货单也是100多个行项目,但因为库存做不准,不及时,以及本来就缺料,在交货单发货过账时会提醒,见下图 但是每次只提醒一个,零件库实际业务…

HCIP-linux知识

linux安装教程参考,https://blog.51cto.com/cloudcs/5245337 yum源配置 本地yum源配置: 8版本配置:将光盘iso挂载到某个目录,/dev/cdrom是/dev/sr0软链接,# mount /dev/cdrom /mnt,# ls /mnt AppStream B…