c# IL 指令解析
.module 模块
.assembly 程序集,.assembly伪指令指定了这个模块属于哪个程序集。模块只能包括一个单独的.assembly伪指令
.entrypoint 进入点 在C#中,这个函数是Main,一个程序只能有一个开始点
.ctor 构造函数
.cctor 静态构造函数
newobj 创建一个新的对象,对应c#中的new,当new被首次调用时,会为代码和变量分配内存。但是之后,在new上的每一次调用,只会为变量分配新的内存
instance 实例函数,区别于静态函数
.maxstack: 这个伪指令指定了在一个方法被调用时,能够出现在计算栈上的元素的最大数量。
ret 函数结束指令
call void System.Console::WriteLine()// call 调用函数 函数的返回类型(void) 命名空间(System) 类 (Console) 函数名称 (WriteLine())
extends 派生
ldstr "xx" 把字符串放到栈上。Ldstr的名称是文本"load a string on the stack"的缩写
ldarg.0: 这是一个汇编器指令,它加载this指针或第0个参数的地址到执行栈上。每个非静态的或实例函数都传递了一个句柄,它表示调用这个函数的对象的变量位置。
这个句柄被称为this指针。this由ldarg.0表示。这个句柄总是被传递为每个实例函数的第1个参数。由于它总是被默认传递,所以在函数的参数列表中没有提及
pop 移出栈顶的任何元素
locals 创建局部变量
ldc.i4 i4就是从内存中获取4个字节,复制到栈,用于放置一个常量数字到栈上
stloc.0 获取位于栈顶的值,stloc用于从栈上获取一个值,并将一个变量初始化为这个值