NET探秘:MSIL权威指南学习笔记(1-3)

来源:互联网 发布:杭州淘宝tnt摄影基地 编辑:程序博客网 时间:2024/06/05 14:35

反编译目标程序集:
>ildasm.exe filename.exe /output=123.il

重新编译程序集:
>ilasm.exe 123.il (会生成123.exe,如果输入是dll,那生成的就是dll)

method的标记号没有顺序问题,只和指令的排列顺序有关,比如以下IL代码还是按从上到下的顺序执行:
IL_FF00: nop
IL_FF00: call Profiler.Profile.Start()
IL_0000: nop
IL_0001: ....

跳转指令都有对应的短版本(.s),短版本处理相对于当前行所在位置1字节内的跳转偏移:
比如br,brtrue,brfalse 和 br.s,brtrue.s,brfalse.s
***这个特性特别重要,因为在我的想法里,添加的代码需要使用一个绝对不会重复的标记号,肯定是往大了设置。
***知道这个特性之后,就明白太大会导致短指令失效,所以到时候可能还得改短指令,也许可以将整个程序的短指令都改了,图省事。

il支持别名(.typedef)
类似c的typedef,不同于c++的typedef,因为在任意位置定义的别名都是全局的,而c++是作用域内的

il支持少量的宏语法:
#ifdef / #ifndef / #else / #endif /
#include(不是插入文本,是挂起当前il的解析,然后跳转到处理include的il,类似中断,然后再回来继续)
#define SYM1
#define SYM2 "SomeText"  替换不带引号
#undef SYM1

ilAsm2.0以后支持以下三种简化的作用域引用
.this 本类
.base 基类
.nester 外层类(内置类的外层类)

原创粉丝点击