c IL 指令解析

2022-09-16 10:57:11 字數 918 閱讀 5180

.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用於從棧上獲取乙個值,並將乙個變數初始化為這個值

閱讀CIL實戰演示

翻開書第176頁,看第3道題 還記得中學的時候,老師就是這麼說的嗎?現在我要說 用ildasm.exe vs2003在e vs.net 2003 sdk v1.1 bin裡面,vs2002在e vs.net frameworksdk bin 裡面 開啟mscorlib.dll 在c winnt mi...

解析 pragma指令

在所有的預處理指令中,pragma 指令可能是最複雜的了,它的作用是設定編譯器的狀態或者是指示編譯器完成一些特定的動作。pragma指令對每個編譯器給出了乙個方法,在保持與c和c 語言完全相容的情況下,給出主機或作業系統專有的特徵。依據定義,編譯指示是機器或作業系統專有的,且對於每個編譯器都是不同的...

解析 pragma指令

在所有的預處理指令中,pragma 指令可能是最複雜的了,它的作用是設定編譯器的狀態或者是指示編譯器完成一些特定的動作。pragma指令對每個編譯器給出了乙個方法,在保持與c和c 語言完全相容的情況下,給出主機或作業系統專有的特徵。依據定義,編譯指示是機器 或作業系統專有的,且對於每個編譯器都是不同...