MSIL入門(二)通過物件看IL

2022-01-10 14:45:21 字數 1820 閱讀 1294

class program

}class myclass

}

例項字段每次建立型別例項的時候都會進行建立,它們屬於這個型別的例項,而靜態欄位由型別的所有例項共享,並且它會在型別載入時建立。某些靜態字段(文字欄位和對映字段)從不分配。引導程式只需要記錄要對映的字段的位置,並在字段定址時定址這些位置。高階別的編譯器(il assembler不執行此操作,將其會留給我們開發人員)把例項欄位和三種靜態欄位中的兩種靜態字段(非文字靜態字段)的型別,很容易從欄位標記中識別出引用欄位的型別。

當在il中找到標記時,jit編譯器不必深入元資料檢索並檢查欄位的標誌。此時所有il有兩組用於字段載入和儲存指令。例項欄位的指令為ldfld,ldflda和stfld;靜態欄位的指令是ldsfld,ldsflda和stsfld。嘗試將靜態字段指令與stance欄位一起使用會導致jit編譯失敗。逆向組合是可行的,但是它需要將例項指標載入到堆疊上,這當然對於靜態欄位是完全多餘的。對靜態字段使用例項字段指令的好處是,它允許以相同的方式訪問靜態欄位和例項字段。

callvirt物件呼叫後期繫結方法,並且將返回值推送到計算堆疊上。

.field private static literal string str = "hello" //靜態公共欄位的定義 

.method private hidebysig static void

main(

string args

) cil managed

// end of method program::main

.method public hidebysig specialname rtspecialname instance void

.ctor() cil managed

// end of method program::.ctor

class program

}public class myclass

public void say()

}

.class public auto ansi beforefieldinit

extends [system.runtime]system.object

// end of method myclass::get_name

.method public hidebysig specialname instance void

set_name(

string 'value'

) cil managed

// end of method myclass::set_name

.method public hidebysig instance void

say() cil managed

// end of method myclass::say

.method public hidebysig specialname rtspecialname instance void

.ctor() cil managed

// end of method myclass::.ctor

.property instance string name()

// end of property myclass::name

.method private hidebysig static void

main(

string args

) cil managed

// end of method program::main

串列埠通訊系列二 通過txt檔案讀取串列埠引數

從txt檔案中串列埠讀取引數 建立txt檔案,並寫入預設引數 讀取txt檔案 根據txt檔案裡的內容設定串列埠引數 filestream 對檔案系統上的檔案進行讀取 寫入 開啟和關閉操作 streamwriter 流寫入 streamreader 流讀取 list集合 using system us...

(二)通過虛擬驅動vivi分析攝像頭驅動

一 通過指令 strace o xawtv.log xawtv 得到以下呼叫資訊 1 7都是在v4l2 open裡呼叫 open ioctl 4,vidioc querycap 3 7 都是在get device capabilities裡呼叫 3.for ioctl 4,vidioc enumin...

08 資料檔案恢復之二通過RMAN恢復

sqlplus在歸檔全的情況下,能搞定一部份的資料檔案的恢復,但真正要做備份恢復,rman才是專業的。下面列了一些資料檔案損壞情況下的恢復做法.1.表空間的資料檔案損壞,但存放盤沒壞。2.表空間單個資料檔案所在存放盤壞。3.close狀態下,所有表空間資料檔案存放盤都壞了。4.在資料庫open狀態下...