元數據與PE文件結構

    元數據被存儲在PE文件的一個區域,MSIL則被存儲在PE文件的另一個區域。元數據部分包含一系列的表和堆。MSIL部分則包含IL語言和元數據標記,這些元數據標記指向元數據部分的某個表的某行或者指向某個堆。
    元數據表和堆
    元數據表中包含程序的各種信息,比如,某個表描述程序中的各個類,另外一個表描述各個類中的字段等等。如果你的代碼裏有10個類,那麼類表中就會有10行,每一行對應一個類。同時類表還會引用其它的表和堆,比如,類表會引用方法定義表。
    元數據也在堆結構中存儲信息。一共有四個堆結構:string、blob、user string、GUID。所有用來命名類型和成員的字符串都是被存儲在string堆中的。比如,一個方法表不直接存儲某個方法的名稱,而是用一個指針指向string堆中存放該方法名稱的地方。
    元數據標識:
    
MSIL中的元數據標識都是唯一的指向特定元數據表中的某一行。每個元數據表示都是4個字節的數字。首字節用來描述是指向元數據中的哪個表的,後三個字節用來表示指向該表的哪一行,即在該表中的偏移。比如,方法定義表的編號是0X06,那麼0x06000004即指向方法定義表的第四行。
    PE文件中的元數據:   
    一個c#程序被編譯之後,生成一個PE文件,該文件包含三部分,接下來的表描述了各個部分的內容:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章