C#探索之路(8):初探.Net中官方文档OpCode的格式

news2024/11/28 8:22:26

C#探索之路(8):初探.Net中官方文档OpCode的格式

文章目录

    • C#探索之路(8):初探.Net中官方文档OpCode的格式
        • 1 前提
        • 2 疑惑1:Opcode格式是什么?
        • 3 答疑1:
        • 4 验证方式:
        • 5 总结

1 前提

最近在尝试了解学习这个OpCode的相关内容的时候,偶然之间对一个无关紧要的概念产生了疑惑。

2 疑惑1:Opcode格式是什么?

OpCode中的格式,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3qnVrpKU-1687198124120)(file:///C:\Users\JACKII~1\AppData\Local\Temp\ksohtml12456\wps1.jpg)]

看到这个是不是有一种熟悉感,一眼看去就是一16进制的表示方式;

首要猜想,可能跟内存地址相关,可能跟顺序相关;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6EDd9DWB-1687198124121)(file:///C:\Users\JACKII~1\AppData\Local\Temp\ksohtml12456\wps2.jpg)]

3 答疑1:

一种程序规范,是对工具后续开发的一种规定,有助于工具有一个统一的标准

4 验证方式:

随手打开一个反汇编工具,当我们看到内部的IL代码的时候,我们发现巧合的对应上了。为了验证猜想,我们多尝试找几个Opcode的指令验证如下:

OpCodes.Stloc_3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-APGsOtbd-1687198124122)(file:///C:\Users\JACKII~1\AppData\Local\Temp\ksohtml12456\wps3.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1irY9cok-1687198124122)(file:///C:\Users\JACKII~1\AppData\Local\Temp\ksohtml12456\wps4.jpg)]

OpCodes.Ldloc_3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SiuoAic8-1687198124123)(file:///C:\Users\JACKII~1\AppData\Local\Temp\ksohtml12456\wps5.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RH70zt9F-1687198124123)(file:///C:\Users\JACKII~1\AppData\Local\Temp\ksohtml12456\wps6.jpg)]

OpCodes.Ldfld

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ve49Vazc-1687198124124)(file:///C:\Users\JACKII~1\AppData\Local\Temp\ksohtml12456\wps7.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5MWGDfVk-1687198124124)(file:///C:\Users\JACKII~1\AppData\Local\Temp\ksohtml12456\wps8.jpg)]

我们会发现,其实这里的格式对上了,只是后面紧跟了一串数字,至于后面这串数字的原因是什么,我目前也不够明确,但是根据我写的这个代码案例来说,我们知道OpCodeItem是一个类,类中含有一个类对象,并且我们知道这个是通过反编译出来的IL代码,所以我猜测这里不存在所谓的“静态内存地址”的说法,所以我会往编译器指令的方向去猜,由于我也是刚刚了解反编译汇编这个工具,巧的是,我的猜想是正确的(内心突然一震…这也行…):

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8hssHCDk-1687198124124)(file:///C:\Users\JACKII~1\AppData\Local\Temp\ksohtml12456\wps9.jpg)]

凭借多年的Find经验,熟练的使用了Ctrl+F,果真找到了:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-moAbhDmm-1687198124125)(file:///C:\Users\JACKII~1\AppData\Local\Temp\ksohtml12456\wps10.jpg)]

对这个了解不多,就不展开详细讲了,但已经有一种感觉有点像是在做逆向工程。

归根结底,总结只有一句话,那就是.Net中OpCode的格式的通俗的描述就是:一套用于统一公共语言工具的一套规范,以便于开发者能够根据一套规范去制定一系列的工具和拓展。这既是统一规范也是规定,没有规范和规定这个语言就无法制定标准。

5 总结

​ 模糊区域已经替大家踩了,他们之间的联系也给大家提出来了,剩下的就交给博客博友们了。

如果您遇到了这个问题,并且我的文章确确实实帮到您了,希望您给一个赞支持一下我呀,喜欢我的文章的朋友也可以关注我的博客,关注我的后续的文章分享呀,谢谢啦。在这里插入图片描述
说时慢,那时快,公众号已经弄好了,后续同步到每一篇博客里面去。

公众号:平平无奇代码猴
也可以搜索:Jackiie_wang 公众号,欢迎大家关注!欢迎催更!留言!

在这里插入图片描述

作者:ProMer_Wang

链接:https://blog.csdn.net/qq_43801020/article/details/131298540

本文为ProMer_Wang的原创文章,著作权归作者所有,转载请注明原文出处,欢迎转载!

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

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

相关文章

使用ChatGPT最新版实现批量写作,打造丰富多彩的聚合文章

随着人工智能的迅猛发展,ChatGPT最新版作为一种自然语言处理模型,可以为我们提供强大的文本生成能力。在这篇文章中,我们将探讨如何利用ChatGPT最新版来实现批量写作,从而打造丰富多彩的聚合文章。 一、ChatGPT最新版简介 Chat…

使用mpi并行技术实现快排Qsort()

快排基本原理: 快速排序可以说是最为常见的排序算法,冒泡排序时间复杂度达到了O(N2),而桶排序容易造成浪费空间。快排(Quicksort)就成为了不错的选择。 1、原理:快排需要找一个数作…

基于 JavaScript 中的 Date 类型实现指定日期和天数的加减运算

文章目录 Intro基本方法构造方法--如何初始化一个Date对象?Date 对象的天数加减法 【工具方法封装】最后 Intro 刚才突然想到,我还有多久就要过27岁的生日了呢。 年近三十,一事无成。 以下基于 JavaScript 中的 Date 对象封装一些方法。 基…

CAS、AtomicInteger和LongAdder原理

目录 一、CAS 1、介绍 2、CAS与volatile 3、为什么无锁效率高 4、总结 二、原子整数 三、原子引用 1、介绍 2、ABA问题 3、AtomicStampedReference 4、AtomicStampedReference 四、原子累加器 1、介绍 2、LongAdder重要关键域 CAS锁 原理之伪共享 3、LongAdde…

Java性能权威指南-总结15

Java性能权威指南-总结15 堆内存最佳实践对象生命周期管理弱引用、软引用与其他引用 小结 堆内存最佳实践 对象生命周期管理 弱引用、软引用与其他引用 在Java中,弱引用和软引用也支持对象重用,不过作为开发者,并不会经常从重用的角度看待…

【C语言进阶】文件操作

目录 🥅什么是文件: 🏑程序文件:🏑数据文件: 🏑文件名: 🥅文件的打开和关闭:🏑文件指针: 🏑fopen和fclose: &a…

基于matlab使用先导校准来补偿阵列不确定性(附源码)

一、前言 此示例说明如何使用先导校准来提高天线阵列在存在未知扰动时的性能。 原则上,可以轻松设计理想的均匀线性阵列(ULA)来执行阵列处理任务,例如波束成形或到达方向估计。在实践中,没有理想的阵列。例如&#xff…

io.netty学习(二)Netty 架构设计

目录 前言 Selector 模型 SelectableChannel Channel 注册到 Selector SelectionKey 遍历 SelectionKey 事件驱动 Channel 回调 Future 事件及处理器 责任链模式 责任链模式的优缺点 ChannelPipeline 将事件传递给下一个处理器 总结 前言 上一篇文章&#xff…

1.react路由的基本使用

第一步 首先打开index.js,在里面引入BrowserRouter或者HashRouter,启用全局路由模式。 BrowserRouter与HashRouter的区别 // index.js import React from react; import ReactDOM from react-dom/client; import ./index.css; import App from ./App;…

P31[10-1]软件模拟IIC通信协议(使用stm32库函数)(内含:实物连接+IIC时序解释+硬件电路+IIC基本时序单元(起始 终止 发送接收 ))

IIC通讯分为硬件读写IIC和软件IIC,以下为软件读写IIC 实物连接如下: 解释: 软件IIC通讯,对MPU6050芯片内部的寄存器进行读写操作,。写入配置寄存器,即可对外挂模块进行配置。。读出数据寄存器,即可获取外挂模块的数据。。。 OLED第一行为设备ID号(固定,有些可能不同)…

基于Springboot+mybatis+mysql+html图书管理系统2

基于Springbootmybatismysqlhtml图书管理系统2 一、系统介绍二、功能展示1.用户登陆2.用户主页3.图书查询4.还书5.个人信息修改6.图书管理(管理员)7.学生管理(管理员)8.废除记录(管理员) 三、数据库四、其它…

8.compute部署neutron服务

compute节点 安装软件包 yum -y install openstack-neutron-linuxbridge ebtables ipset 修改配置文件:/etc/neutron/neutron.conf #查看文件属性 ll /etc/neutron/neutron.conf -rw-r----- 1 root neutron ... /etc/neutron/neutron.conf #备份配置文件 cp /e…

C语言:将一句话的单词进行倒置,标点不倒置。

题目: 将一句话的单词进行倒置,标点不倒置。(字符数组长度不超过100) 比如:I like beijing. 经过函数后变为:beijing. like I 思路: 总体思路: (可以把两步顺序调换&am…

chatgpt赋能python:Python中寻找不重复字符的方法

Python中寻找不重复字符的方法 Python是一种著名界面友好、易学易用且功能强大的编程语言,广泛应用于各种需求中。在本篇文章中,我们将会讨论如何使用Python编程语言来寻找一个字符串中的不重复字符。我们将简单介绍如何实现这个过程以及为什么这个过程…

Python小白如何利用GPT4快速开发一个网站!

这个是一个全栈的项目,麻雀虽小,五脏俱全!全程都是利用gpt4进行辅助编程搞定的。第一版其实非常快,大概30分钟就搞定了,后续就是不断的添砖加瓦,增加功能和优化UI。 其实很多小白都在说要学Python&#xff…

chatgpt赋能python:Python扩展库需要导入吗?重要性与结论解析

Python扩展库需要导入吗?重要性与结论解析 作为业内最受欢迎的编程语言之一,Python在数据科学、人工智能、Web开发等领域拥有大量的应用。在Python开发过程中,扩展库的使用是不可避免的。本文将介绍Python扩展库的重要性以及是否需要导入的问…

【Arduino】Portenta H7 板子介绍

文章目录 1. Features2. Pins Name3. Functions3.1 analogReadResolution()3.2 millis() Ref. 1. Features 2. Pins Name 3. Functions 3.1 analogReadResolution() analogReadResolution() is an extension of the Analog API for the Zero, Due, MKR family, Nano 33 (BLE …

vue3-实战-10-管理后台-权限管理之用户管理模块开发

目录 1-用户首页列表开发 1.1-需求原型分析 1.2-封装请求和数据类型 1.3-数据页面渲染和展示 1.4-点击搜索按钮搜索用户 1.5-点击重置按钮 2-新增编辑用户 2.1-原型需求分析 2.2-表单页面数据收集 2.3-页面校验规则的定义 2.4-添加用户按钮编辑按钮逻辑 2.5-保存和取…

C++个人通信录系统

背景: 使用C编写一个通信录程序,来完成作业上的一些需求。 1-提供录入个人信息、修改个人信息(姓名和出生日期除外)、删除个人信息等编辑功能 2-提供按姓名查询个人信息的功能 3-提供查找在5天之内过生日的人员的信息&#xf…

Gof23设计模式之工厂方法模式和抽象工厂模式

在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。 如果我们…