NET探秘:MSIL权威指南学习笔记(速读4-16)

今天非常快速的看完全部章节,感觉对IL已经有了一个非常轮廓的了解,知道如果碰到问题了,需要怎么查阅本书。
大致看了一遍,1-3章略微介绍了一些IL片段,让人有些基本认识。
4-16章分别介绍了一些专门的知识,分类如下

文件格式:
第4章:介绍基于CRL的可执行文件结构
第5章:元数据表相关结构,这里所有函数都有

高级程序语言里的概念所对应的IL语法相关,本章开始,涉及到IL的语法规范了,如果想独立写出IL,应该从此章开始认真学习:
第6章:模块和程序集
第7章:命名空间和类
第8章:基本类型和签名
第9章:字段和数据常量
第10章:方法
第11章:泛型类
第12章:泛型方法
IL指令相关,主要是如何翻译高级语言写成的函数,类似C++到asm:
第13章:IL指令
特殊的
第14章:异常相关处理
第15章:事件和属性 , 事件和属性本质上还是对方法的调用。只是过程被规范化了
第16章:用户自定义属性相关

本来想的是在生成的il文件上做文章,看完之后有个想法:
混淆器已经支持函数重命名,并且可以更改其命名空间,那它肯定有生成IL的地方,然后调用ilasm.exe来生成新的模块。
找了一下,果然是, MethodDefinition.Body.Instructions 就是函数体,可以直接在这里添加profiler的函数指令。
如果添加后的函数体指令长度超过127,则需要将所有短指令改成长指令了。
看来可以动手研究怎么用Mono.Cecil了。

另外一个方向,调试u3d的代码,以UnityEngine.Camera.Render()为目标,我尝试在函数体里增加Debug.Log的指令,报错了..
这个函数是 internalcall类型的函数,不能有body,去掉internalcall之后,untiy的editor就打不开了...
第5章描述过,CLR会检查元数据头和实际代码的一致性,到底internalcall的函数能否插代码,还需要进一步考察。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值