MSIL教程
更新时间:2023-11-05 10:16:01 阅读量: 综合文库 文档下载
- msil教程推荐度:
- 相关推荐
基本概念
微软中间语言(MSIL) 是一种语言,是许多编译器(C#,VB.NET等)的输出 中间语言反汇编器(ILDasm) 让用户以人可阅读的格式查看MSIL代码。
DotNet可执行文件(dll或exe) MSIL代码 ILDasm
中间语言编译器(ILAsm) 从MSIL语言生成可执行文件
MSIL代码 DotNet可执行文件(dll或exe) ILAsm 存放路径: WINNT \\ Microsoft.NET \\Framework \\vn.nn.nn 语言参考
所有MSIL指令的说明
FrameworkSDK\\Tool Developers Guide\\docs\\Partition II Metadata.doc MSIL命令的完整列表
FrameworkSDK\\Tool Developers Guide\\docs\\Partition III CIL.doc
一般信息
在MSIL中,所有的操作都在栈上完成。当调用一个函数的时候,其参数和局部变量都被分配到栈上。函数的代码从该栈开始,把一些值压入栈,对这些值进行一些操作,从栈上取出值。
执行MSIL命令和函数由3个步骤完成
Step1 把命令操作数和函数参数压入栈(ld命令)。
Step2 执行命令或者调用函数。命令或函数从栈中取出他们的操作数(参数)并把他们压入结果栈(返回值)。
Step3 从栈中读取结果值(st命令)。
注意:上面的步骤是可选的,例如void函数不会压入一个结果值到栈。 栈包含值类型对象和引用类型对象 引用类型对象本身保存在堆中
示例项目
打印字符串 用到的MSIL指令
.entrypoint 定义程序的入口点,该函数在程序启动的时候由.NET 运行库调用 .maxstack 定义函数代码所用堆栈的最大深度。
用到的MSIL命令
ldstr string 把一个字符串常量装入堆栈。
call function(parameters) 调用静态函数,函数的参数必须在函数调用前装入堆栈。 pop 取出栈顶的值,当我们不需要把值存入变量时使用。 ret 从一个函数中返回。
.assembly PrintString {} /*
Console.WriteLine(\ */
.method staticpublicvoid main() il managed {
.entrypoint // 该函数是程序的入口 .maxstack 8
// ***************************************************** // Console.WriteLine(\\
// ***************************************************** ldstr \ // 把字符串压入堆栈 // 调用静态的System.Console.Writeline函数 // (函数移除栈顶的字符串)
call void [mscorlib]System.Console::WriteLine (class System.String)
// *****************************************************
ldstr \Enter to continue\
call void [mscorlib]System.Console::WriteLine (class System.String) // 调用 System.Console.Read 函数
call int32 [mscorlib]System.Console::Read() // pop 指令移除栈顶元素 // (移除由Read()函数返回的数字 pop
// ***************************************************** ret }
赋值
该程序给一个变量赋与int值并把它打印到控制台窗口
用到的MSIL命令
ldc.i4.n 把一个 32位的常量(n从0到8)装入堆栈
stloc.n 把一个从堆栈中返回的值存入第n(n从0到8)个局部变量
.assembly XequalN {} // int x; // x = 7;
// Console.WriteLine(x);
.method staticpublicvoid main() il managed {
.entrypoint .maxstack 8
.locals init ([0] int32 x) // 分配一个局部变量
// ***************************************************** // x = 7;
// *****************************************************
ldc.i4.7 // 把常量装入堆栈
stloc.0 // 把堆栈中的值存入第0个变量
// ***************************************************** // Console.WriteLine(x);
// ***************************************************** ldloc.0 // 把第0个变量转入堆栈
call void [mscorlib]System.Console::WriteLine(int32) ret }
数据运算
本程序从控制台读取2个数字,对它们进行简单的运算,然后显示结果。
要用到的MSIL命令
add 2个值相加。命令的参数必须在调用前装入堆栈,该函数从堆栈中移除参数并把运算后的结果压入堆栈。 sub 2个值相减。 mul 2个值相乘。
.assembly Operations {} /*
// 程序的C#代码: int x, y, z; string s;
Console.WriteLine(\x:\ s = Console.ReadLine(); x = Int32.Parse(s);
Console.WriteLine(\y:\ s = Console.ReadLine();
y = Int32.Parse(s);
z = x + y;
Console.Write(\+ y = \ Console.Write(z); Console.WriteLine(\
z = x - y;
Console.Write(\- y = \ Console.Write(z); Console.WriteLine(\
z = x * y;
Console.Write(\* y = \ Console.Write(z); Console.WriteLine(\ */
.method staticpublicvoid main() il managed {
.entrypoint .maxstack 8
.locals init ([0] int32 x, [1] int32 y, [2] int32 z, [3] string s)
// ***************************************************** // Console.WriteLine(\x:\
call void [mscorlib]System.Console ::WriteLine(string)
leave.s END_TRY_CATCH // 退出catch块 }
END_TRY_CATCH: ret }
正在阅读:
MSIL教程11-05
讲义SPC04-27
电气工程及其自动化专业毕业设计论文--110kV区域变电站电气部分设计09-22
上海金山区枫泾镇桃源名庭工程安全监理交底06-16
增霸卡6.X使用说明 - 图文03-19
哈师大物理学院课程表11-05
基于分数Black_Scholes模型的外汇期权定价及其评判检验05-10
《鲁滨孙漂流记》阅读指导课教学案例赏析11-18
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 教程
- MSIL
- 2011年中考物理—测电阻的变式(学生版)
- 药物分析重点论述题
- 航空限高申请表格
- 读后感 管钰
- 教育技术促进农村教师专业化发展研究A3 - 图文
- 水利工程测量课程考核说明
- 城镇土地定级和基准地价的关系研究
- 2015国家杰出青年科学基金项目—填报说明与撰写提纲
- 陕西省省级企业国有资本收益收缴管理暂行办法
- 绿化行业分析
- 水工钢结构简答题
- 单片机上机试题
- 蓝田股份案例分析(终)
- 生产线物料管理基本知识
- 柯尼卡美能达162210技术维修模式
- 塑料成型机械期末复习习题及答案 2011.11.15
- 奥鹏西工大16春《画法几何与机械制图(上)》在线作业
- 《论语》导读(上)尔雅答案修订无错版
- 2018-2019学年高中化学人教版必修2课时跟踪检测:(十三)3.2.1 乙烯 Word版含解析
- 第3课 玩转鼠标