日期
|
更改
|
2/15/2008
|
更新了5.7節,並將附錄A移到了「
Windows Authenticode
可移植可執行簽名格式」中
|
5/18/2006
|
建立
|
名稱
|
描述
|
屬性證書
|
用來將可校驗的聲明與映像關聯起來的證書。有許多不一樣的可校驗聲明能夠與文件關聯,最經常使用的一種就是軟件製造商用來指明映像的消息摘要是什麼的聲明。消息摘要與校驗和相似,但想要僞造它卻極其困難。所以對一個文件進行修改並保持它的消息摘要與原始文件一致是很是困難的。正如製造商所作的那樣,可使用公鑰或私鑰加密機制來校驗聲明。本文檔除了描述容許將它們插入到映像文件中外還描述了有關屬性證書的詳細信息。
|
日期/時間戳
|
因爲不一樣目的而用於PE或COFF文件中好幾個地方的戳。戳的格式與C運行時庫時間函數所使用的戳的格式相同。
|
文件指針
|
某項內容在文件被連接器處理前(若是是目標文件文件)或者被加載器處理前(若是是映像文件)在文件自身中的位置。換句話說,這是一個位於存儲在磁盤上的文件中的位置。
|
連接器
|
指的是隨
Microsoft Visual Studio®
提供的連接器。
|
映像文件
|
可執行文件:或者是.EXE文件,或者是DLL。映像文件能夠被認爲是「內存映像」。術語「映像文件」常常用來代替「可執行文件」,由於後者有時僅用來指代.EXE文件。
|
目標文件
|
做爲連接器的輸入的文件。連接器生成一個映像文件,而這個映像文件又做爲加載器的輸入。
|
保留,必須爲0
|
對一個域的這種描述代表,對於生成這個域的程序來講必須將這個域設置爲0,對於使用這個域的程序來講必須忽略它的值。
|
RVA
|
相對虛擬地址。對於映像文件來講,它是某項內容被加載進內存後的地址減去映像文件的基地址。某項內容的RVA幾乎老是與它在磁盤上的文件中的位置(文件指針)不一樣。
對於目標文件來講,RVA並無什麼意義,由於內存位置還沒有分配。在這種狀況下,RVA是一個節(後面將要描述)中的地址,這個地址在之後連接時要被重定位。爲了簡單起見,編譯器應該將每一個節的首個RVA設置爲0。
|
節
|
節是PE或COFF文件中代碼或數據的基本單元。例如一個目標文件中全部代碼能夠被組合成單個節,或者(依賴於編譯器的行爲)每一個函數獨佔一個節。增長節的數目會增長文件開銷,可是連接器在連接代碼時有更大的選擇餘地。節與Intel 8086體系結構中的段很是類似。一個節中的全部原始數據必須被加載到連續的內存中。另外,映像文件可能包含一些具備特殊用途的節,例如.tls節或.reloc節。
|
VA
|
虛擬地址。除了不減去映像文件的基地址外,與RVA相同。這個地址之因此被叫作「虛擬地址」是由於Windows爲每一個進程建立一個私有的虛擬地址空間,它獨立於物理內存。不管出於何種目的,VA都只應該被認爲是一個地址。VA並不能像RVA那樣可以預先獲得,由於加載器可能不把映像加載到它的首選位置上。
|
MS-DOS 2.0 兼容
EXE 文件頭
|
|
映像頭基地址
|
未使用
|
|
|
OEM 標識
OEM 信息
PE文件頭偏移
|
|
MS‑DOS 2.0
節 (僅用於MS‑DOS兼容) |
MS‑DOS 2.0
佔位程序
和
重定位表
|
|
|
未使用
|
|
|
PE 文件頭
(按8字節邊界對齊)
|
|
|
節頭
|
|
|
映像頁:
導入信息
導出信息
基址重定位信息
資源信息
|
|
|
Microsoft COFF文件頭
|
|
|
節頭
|
|
|
原始數據:
代碼
數據
調試信息
重定位信息
|
|
|
偏移
|
大小
|
域
|
描述
|
0
|
2
|
Machine
|
標識目標機器類型的數字。要獲取更多信息,請參考3.3.1節「機器類型」。
|
2
|
2
|
NumberOfSections
|
節的數目。它給出了節表的大小,而節表緊跟着文件頭。
|
4
|
4
|
TimeDateStamp
|
從UTC時間1970年1月1日00:00起的總秒數(一個C運行時time_t類型的值)的低32位,它指出文件什麼時候被建立。
|
8
|
4
|
PointerToSymbolTable
|
COFF
符號表的文件偏移。若是不存在COFF符號表,此值爲0。對於映像文件來講,此值應該爲0,由於已經不同意使用COFF調試信息了。
|
12
|
4
|
NumberOfSymbols
|
符號表中的元素數目。因爲字符串表緊跟符號表,因此能夠利用這個值來定位字符串表。對於映像文件來講,此值應該爲0,由於已經不同意使用COFF調試信息了。
|
16
|
2
|
SizeOfOptionalHeader
|
可選文件頭的大小。可執行文件須要可選文件頭而目標文件並不須要。對於目標文件來講,此值應該爲0。要獲取可選文件頭格式的詳細描述,請參考3.4節「可選文件頭(僅適用於映像文件)」。
|
18
|
2
|
Characteristics
|
指示文件屬性的標誌。對於特定的標誌,請參考3.3.2節「特徵」。
|
常量
|
值
|
描述
|
IMAGE_FILE_MACHINE_UNKNOWN
|
0x0
|
適用於任何類型處理器
|
IMAGE_FILE_MACHINE_AM33
|
0x1d3
|
Matsushita AM33
處理器
|
IMAGE_FILE_MACHINE_AMD64
|
0x8664
|
x64
處理器
|
IMAGE_FILE_MACHINE_ARM
|
0x1c0
|
ARM
小尾處理器
|
IMAGE_FILE_MACHINE_EBC
|
0xebc
|
EFI
字節碼處理器
|
IMAGE_FILE_MACHINE_I386
|
0x14c
|
Intel 386
或後繼處理器及其兼容處理器
|
IMAGE_FILE_MACHINE_IA64
|
0x200
|
Intel Itanium
處理器家族
|
IMAGE_FILE_MACHINE_M32R
|
0x9041
|
Mitsubishi M32R
小尾處理器
|
IMAGE_FILE_MACHINE_MIPS16
|
0x266
|
MIPS16
處理器
|
IMAGE_FILE_MACHINE_MIPSFPU
|
0x366
|
帶
FPU
的MIPS處理器
|
IMAGE_FILE_MACHINE_MIPSFPU16
|
0x466
|
帶
FPU
的MIPS16處理器
|
IMAGE_FILE_MACHINE_POWERPC
|
0x1f0
|
PowerPC
小尾處理器
|
IMAGE_FILE_MACHINE_POWERPCFP
|
0x1f1
|
帶符點運算支持的
PowerPC
處理器
|
IMAGE_FILE_MACHINE_R4000
|
0x166
|
MIPS
小尾處理器
|
IMAGE_FILE_MACHINE_SH3
|
0x1a2
|
Hitachi SH3
處理器
|
IMAGE_FILE_MACHINE_SH3DSP
|
0x1a3
|
Hitachi SH3 DSP
處理器
|
IMAGE_FILE_MACHINE_SH4
|
0x1a6
|
Hitachi
SH4
處理器
|
IMAGE_FILE_MACHINE_SH5
|
0x1a8
|
Hitachi SH5
處理器
|
IMAGE_FILE_MACHINE_THUMB
|
0x1c2
|
Thumb
處理器
|
IMAGE_FILE_MACHINE_WCEMIPSV2
|
0x169
|
MIPS
小尾
WCE v2
處理器
|
標誌
|
值
|
描述
|
IMAGE_FILE_RELOCS_STRIPPED
|
0x0001
|
僅適用於映像文件,適用於
Windows CE
、
Microsoft Windows NT®
及其後繼操做系統。它代表此文件不包含基址重定位信息,所以必須被加載到其首選基地址上。若是基地址不可用,加載器會報錯。連接器默認會移除可執行(EXE)文件中的重定位信息。
|
IMAGE_FILE_EXECUTABLE_IMAGE
|
0x0002
|
僅適用於映像文件。它代表此映像文件是合法的,能夠被運行。若是未設置此標誌,代表出現了連接器錯誤。
|
IMAGE_FILE_LINE_NUMS_STRIPPED
|
0x0004
|
COFF
行號信息已經被移除。不同意使用此標誌,它應該爲0。
|
IMAGE_FILE_LOCAL_SYMS_STRIPPED
|
0x0008
|
COFF
符號表中有關局部符號的項已經被移除。不同意使用此標誌,它應該爲0。
|
IMAGE_FILE_AGGRESSIVE_WS_TRIM
|
0x0010
|
此標誌已經被捨棄。它用於調整工做集。Windows 2000及其後繼操做系統不同意使用此標誌,它應該爲0。
|
IMAGE_FILE_LARGE_ADDRESS_AWARE
|
0x0020
|
應用程序能夠處理大於2GB的地址。
|
|
0x0040
|
此標誌保留供未來使用。
|
IMAGE_FILE_BYTES_REVERSED_LO
|
0x0080
|
小尾:在內存中,最不重要位(LSB)在最重要位(MSB)前面。不同意使用此標誌,它應該爲0。
|
IMAGE_FILE_32BIT_MACHINE
|
0x0100
|
機器類型基於32位字體系結構。
|
IMAGE_FILE_DEBUG_STRIPPED
|
0x0200
|
調試信息已經今後映像文件中移除。
|
IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
|
0x0400
|
若是此映像文件在可移動介質上,徹底加載它並把它複製到交換文件中。
|
IMAGE_FILE_NET_RUN_FROM_SWAP
|
0x0800
|
若是此映像文件在網絡介質上,徹底加載它並把它複製到交換文件中。
|
IMAGE_FILE_SYSTEM
|
0x1000
|
此映像文件是系統文件,而不是用戶程序。
|
IMAGE_FILE_DLL
|
0x2000
|
此映像文件是動態連接庫(DLL)。這樣的文件總被認爲是可執行文件,儘管它們並不能直接被運行。
|
IMAGE_FILE_UP_SYSTEM_ONLY
|
0x4000
|
此文件只能運行於單處理器機器上。
|
IMAGE_FILE_BYTES_REVERSED_HI
|
0x8000
|
大尾:在內存中,MSB在LSB前面。不同意使用此標誌,它應該爲0。
|
幻數
|
PE
格式
|
0x10b
|
PE32
|
0x20b
|
PE32+
|
偏移(
PE32/PE32+
)
|
大小
(
PE32/PE32+
)
|
文件頭部分
|
描述
|
0
|
28/24
|
標準域
|
這些域被全部COFF實現所定義,其中包括UNIX。
|
28/24
|
68/88
|
Windows
特定域
|
支持Windows特性(例如子系統)的附加域。
|
96/112
|
Variable
|
數據目錄
|
映像文件中的特殊表(例如導入表和導出表)的地址/大小組合,它們供操做系統使用。
|
偏移
|
大小
|
域
|
描述
|
0
|
2
|
Magic
|
這個無符號整數指出了映像文件的狀態。最經常使用的數字是0x10B,它代表這是一個正常的可執行文件。0x107代表這是一個ROM映像,0x20B代表這是一個PE32+可執行文件。
|
2
|
1
|
MajorLinkerVersion
|
連接器的主版本號。
|
3
|
1
|
MinorLinkerVersion
|
連接器的次版本號。
|
4
|
4
|
SizeOfCode
|
代碼節(.text)的大小。若是有多個代碼節的話,它是全部代碼節的和。
|
8
|
4
|
SizeOfInitializedData
|
已初始化數據節的大小。若是有多個這樣的數據節的話,它是全部這些數據節的和。
|
12
|
4
|
SizeOfUninitializedData
|
未初始化數據節(.bss)的大小。若是有多個.bss節的話,它是全部這些節的和。
|
16
|
4
|
AddressOfEntryPoint
|
當可執行文件被加載進內存時其入口點相對於映像基址的偏移地址。對於通常程序映像來講,它就是啓動地址。對於設備驅動程序來講,它是初始化函數的地址。入口點對於DLL來講是可選的。若是不存在入口點的話,這個域必須爲0。
|
20
|
4
|
BaseOfCode
|
當映像被加載進內存時代碼節的開頭相對於映像基址的偏移地址。
|
偏移
|
大小
|
域
|
描述
|
24
|
4
|
BaseOfData
|
當映像被加載進內存時數據節的開頭相對於映像基址的偏移地址。
|
偏移
(
PE32/ PE32+ ) |
大小
(
PE32/ PE32+ ) |
域
|
描述
|
28/24
|
4/8
|
ImageBase
|
當加載進內存時映像的第一個字節的首選地址。它必須是64K的倍數。DLL默認是0x10000000。Windows CE EXE默認是0x00010000。Windows NT、Windows 2000、Windows XP、 Windows 9五、Windows 98和 Windows Me 默認是0x00400000。
|
32/32
|
4
|
SectionAlignment
|
當加載進內存時節的對齊值(以字節計)。它必須大於或等於
FileAlignment
。默認是相應系統的頁面大小。
|
36/36
|
4
|
FileAlignment
|
用來對齊映像文件的節中的原始數據的對齊因子(以字節計)。它應該是界於512和64K之間的2的冪(包括這兩個邊界值)。默認是512。若是SectionAlignment小於相應系統的頁面大小,那麼FileAlignment必須與SectionAlignment匹配。
|
40/40
|
2
|
MajorOperatingSystemVersion
|
所需操做系統的主版本號。
|
42/42
|
2
|
MinorOperatingSystemVersion
|
所需操做系統的次版本號。
|
44/44
|
2
|
MajorImageVersion
|
映像的主版本號。
|
46/46
|
2
|
MinorImageVersion
|
映像的次版本號。
|
48/48
|
2
|
MajorSubsystemVersion
|
子系統的主版本號。
|
50/50
|
2
|
MinorSubsystemVersion
|
子系統的次版本號。
|
52/52
|
4
|
Win32VersionValue
|
保留,必須爲0。
|
56/56
|
4
|
SizeOfImage
|
當映像被加載進內存時的大小(以字節計),包括全部的文件頭。它必須是
SectionAlignment
的倍數。
|
60/60
|
4
|
SizeOfHeaders
|
MS‑DOS
佔位程序、PE文件頭和節頭的總大小,向上舍入爲
FileAlignment
的倍數。
|
64/64
|
4
|
CheckSum
|
映像文件的校驗和。計算校驗和的算法被合併到了IMAGEHLP.DLL 中。如下程序在加載時被校驗以肯定其是否合法:全部的驅動程序、任何在引導時被加載的DLL以及加載進關鍵Windows進程中的DLL。
|
68/68
|
2
|
Subsystem
|
運行此映像所需的子系統。要獲取更多信息,請參考後面的「Windows子系統」部分。
|
70/70
|
2
|
DllCharacteristics
|
要獲取更多信息,請參考後面的「DLL特徵」部分。
|
72/72
|
4/8
|
SizeOfStackReserve
|
保留的堆棧大小。只有
SizeOfStackCommit
指定的部分被提交;其他的每次可用一頁,直到到達保留的大小爲止。
|
76/80
|
4/8
|
SizeOfStackCommit
|
提交的堆棧大小。
|
80/88
|
4/8
|
SizeOfHeapReserve
|
保留的局部堆空間大小。只有
SizeOfHeapCommit
指定的部分被提交;其他的每次可用一頁,直到到達保留的大小爲止。
|
84/96
|
4/8
|
SizeOfHeapCommit
|
提交的局部堆空間大小。
|
88/104
|
4
|
LoaderFlags
|
保留,必須爲0。
|
92/108
|
4
|
NumberOfRvaAndSizes
|
可選文件頭其他部分中數據目錄項的個數。每一個數據目錄描述了一個表的位置和大小。
|
常量
|
值
|
描述
|
IMAGE_SUBSYSTEM_UNKNOWN
|
0
|
未知子系統
|
IMAGE_SUBSYSTEM_NATIVE
|
1
|
設備驅動程序和N
ative Windows
進程
|
IMAGE_SUBSYSTEM_WINDOWS_GUI
|
2
|
Windows
圖形用戶界面(
GUI
)子系統
|
IMAGE_SUBSYSTEM_WINDOWS_CUI
|
3
|
Windows
字符模式(CUI)子系統
|
IMAGE_SUBSYSTEM_POSIX_CUI
|
7
|
Posix
字符模式子系統
|
IMAGE_SUBSYSTEM_WINDOWS_CE_GUI
|
9
|
Windows CE
|
IMAGE_SUBSYSTEM_EFI_APPLICATION
|
10
|
可擴展固件接口(EFI)應用程序
|
IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER
|
11
|
帶引導服務的
EFI
驅動程序
|
IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER
|
12
|
帶運行時服務的
EFI
驅動程序
|
IMAGE_SUBSYSTEM_EFI_ROM
|
13
|
EFI ROM
映像
|
IMAGE_SUBSYSTEM_XBOX
|
14
|
XBOX
|
常量
|
值
|
描述
|
|
0x0001
|
保留,必須爲0。
|
|
0x0002
|
保留,必須爲0。
|
|
0x0004
|
保留,必須爲0。
|
|
0x0008
|
保留,必須爲0。
|
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
|
0x0040
|
DLL
能夠在加載時被重定位。
|
IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY
|
0x0080
|
強制進行代碼完整性校驗。
|
IMAGE_DLLCHARACTERISTICS_NX_COMPAT
|
0x0100
|
映像兼容於
NX
。
|
IMAGE_DLLCHARACTERISTICS_NO_ISOLATION
|
0x0200
|
能夠隔離,但並不隔離此映像。
|
IMAGE_DLLCHARACTERISTICS_NO_SEH
|
0x0400
|
不使用結構化異常(SE)處理。在此映像中不能調用SE處理程序。
|
IMAGE_DLLCHARACTERISTICS_NO_BIND
|
0x0800
|
不綁定映像。
|
|
0x1000
|
保留,必須爲0。
|
IMAGE_DLLCHARACTERISTICS_WDM_DRIVER
|
0x2000
|
WDM
驅動程序。
|
IMAGE_DLLCHARACTERISTICS_
TERMINAL_SERVER_AWARE |
0x8000
|
能夠用於終端服務器。
|
偏移
(
PE/PE32+
)
|
大小
|
域
|
描述
|
96/112
|
8
|
Export Table
|
導出表的地址和大小。要獲取更多信息,請參考6.3節「.edata節(僅適用於映像文件)」。
|
104/120
|
8
|
Import Table
|
導入表的地址和大小。要獲取更多信息,請參考6.4節「.idata節」。
|
112/128
|
8
|
Resource Table
|
資源表的地址和大小。要獲取更多信息,請參考6.9節「.rsrc節」。
|
120/136
|
8
|
Exception Table
|
異常表的地址和大小。要獲取更多信息,請參考6.5節「.pdata節」。
|
128/144
|
8
|
Certificate Table
|
屬性證書表的地址和大小。要獲取更多信息,請參考5.7節「屬性證書表(僅適用於映像文件)」
|
136/152
|
8
|
Base Relocation Table
|
基址重定位表的地址和大小。要獲取更多信息,請參考6.6節「.reloc節(僅適用於映像文件)」。
|
144/160
|
8
|
Debug
|
調試數據起始地址和大小。要獲取更多信息,請參考6.1節「.debug節」。
|
152/168
|
8
|
Architecture
|
保留,必須爲0。
|
160/176
|
8
|
Global Ptr
|
將被存儲在全局指針寄存器中的一個值的RVA。這個結構的Size域必須爲0。
|
168/184
|
8
|
TLS Table
|
線程局部存儲(TLS)表的地址和大小。要獲取更多信息,請參考6.7節「.tls節」。
|
176/192
|
8
|
Load Config Table
|
加載配置表的地址和大小。要獲取更多信息,請參考6.8節「加載配置結構(僅適用於映像文件)」。
|
184/200
|
8
|
Bound Import
|
綁定導入表的地址和大小。
|
192/208
|
8
|
IAT
|
導入地址表的地址和大小。要獲取更多信息,請參考6.4.4節「導入地址表」。
|
200/216
|
8
|
Delay Import Descriptor
|
延遲導入描述符的地址和大小。要獲取更多信息,請參考5.8節「延遲加載導入表(僅適用於映像文件)」。
|
208/224
|
8
|
CLR Runtime Header
|
CLR
運行時頭部的地址和大小。要獲取更多信息,請參考6.10節「.cormeta節(僅適用於目標文件)」
|
216/232
|
8
|
保留,必須爲0。
|
偏移
|
大小
|
域
|
描述
|
0
|
8
|
Name
|
這是一個8字節的UTF-8編碼的字符串,不足8字節時用NULL填充。若是它正好是8字節,那就沒有最後的NULL字符。若是名稱更長的話,這個域中是一個斜槓(/)後跟一個用ASCII碼錶示的十進制數,這個十進制數表示字符串表中的偏移。可執行映像不使用字符串表也不支持長度超過8字節的節名。若是目標文件中有長節名的節最後要出如今可執行文件中,那麼相應的長節名會被截斷。
|
8
|
4
|
VirtualSize
|
當加載進內存時這個節的總大小。若是此值比SizeOfRawData大,那麼多出的部分用0填充。這個域僅對可執行映像是合法的,對於目標文件來講,它應該爲0。
|
12
|
4
|
VirtualAddress
|
對於可執行映像來講,這個域的值是這個節被加載進內存以後它的第一個字節相對於映像基址的偏移地址。對於目標文件來講,這個域的值是沒有重定位以前其第一個字節的地址;爲了簡單起見,編譯器應該把此值設置爲0。不然這個值是個任意值,可是在重定位時應該從偏移地址中減去這個值。
|
16
|
4
|
SizeOfRawData
|
(對於目標文件來講)節的大小或者(對於映像文件來講)磁盤文件中已初始化數據的大小。對於可執行映像來講,它必須是可選文件頭中FileAlignment域的倍數。若是它小於VirtualSize域的值,餘下的部分用0填充。因爲SizeOfRawData域要向上舍入,可是VirtualSize域並不舍入,所以可能出現SizeOfRawData域大於VirtualSize域的狀況。當節中僅包含未初始化的數據時,這個域應該爲0。
|
20
|
4
|
PointerToRawData
|
指向COFF文件中節的第一個頁面的文件指針。對於可執行映像來講,它必須是可選文件頭中FileAlignment域的倍數。對於目標文件來講,要得到最好的性能,此值應該按4字節邊界對齊。當節中僅包含未初始化的數據時,這個域應該爲0。
|
24
|
4
|
PointerToRelocations
|
指向節中重定位項開頭的文件指針。對於可執行文件或者沒有重定位項的文件來講,此值應該爲0。
|
28
|
4
|
PointerToLinenumbers
|
指向節中行號項開頭的文件指針。若是沒有COFF行號信息的話,此值應該爲0。對於映像來講,此值應該爲0,由於已經不同意使用COFF調試信息了。
|
32
|
2
|
NumberOfRelocations
|
節中重定位項的個數。對於可執行映像來講,此值應該爲0。
|
34
|
2
|
NumberOfLinenumbers
|
節中行號項的個數。對於映像來講,此值應該爲0,由於已經不同意使用COFF調試信息了。
|
36
|
4
|
Characteristics
|
描述節特徵的標誌。要獲取更多信息,請參考4.1節「節標誌」。
|
標誌
|
值
|
描述
|
|
0x00000000
|
保留供未來使用。
|
|
0x00000001
|
保留供未來使用。
|
|
0x00000002
|
保留供未來使用。
|
|
0x00000004
|
保留供未來使用。
|
IMAGE_SCN_TYPE_NO_PAD
|
0x00000008
|
從這個節結尾到下一個邊界之間不能填充。此標誌被捨棄,它已經被IMAGE_SCN_ALIGN_1BYTES標誌取代。此標誌僅對目標文件合法。
|
|
0x00000010
|
保留供未來使用。
|
IMAGE_SCN_CNT_CODE
|
0x00000020
|
此節包含可執行代碼。
|
IMAGE_SCN_C
NT_INITIALIZED_DATA
|
0x00000040
|
此節包含已初始化的數據。
|
IMAGE_SCN_CNT_UNINITIALIZED_DATA
|
0x00000080
|
此節包含未初始化的數據。
|
IMAGE_SCN_LNK_OTHER
|
0x00000100
|
保留供未來使用。
|
IMAGE_SCN_LNK_INFO
|
0x00000200
|
此節包含註釋或者其它信息。.drectve
節具備這種屬性。
此標誌僅對目標文件合法。
|
|
0x00000400
|
保留供未來使用。
|
IMAGE_SCN_LNK_REMOVE
|
0x00000800
|
此節不會成爲最終造成的映像文件的一部分。此標誌僅對目標文件合法。
|
IMAGE_SCN_LNK_COMDAT
|
0x00001000
|
此節包含COMDAT數據。要獲取更多信息,請參考5.5.6節「COMDAT
節(僅適用於目標文件)
」。此標誌僅對目標文件合法。
|
IMAGE_SCN_GPREL
|
0x00008000
|
此節包含經過全局指針(GP)來引用的數據。
|
IMAGE_SCN_MEM_PURGEABLE
|
0x00020000
|
保留供未來使用。
|
IMAGE_SCN_MEM_16BIT
|
0x00020000
|
保留供未來使用。
|
IMAGE_SCN_MEM_LOCKED
|
0x00040000
|
保留供未來使用。
|
IMAGE_SCN_MEM_PRELOAD
|
0x00080000
|
保留供未來使用。
|
IMAGE_SCN_ALIGN_1BYTES
|
0x00100000
|
按1字節邊界對齊數據。此標誌僅對目標文件合法。
|
IMAGE_SCN_ALIGN_2BYTES
|
0x00200000
|
按2字節邊界對齊數據。此標誌僅對目標文件合法。
|
IMAGE_SCN_ALIGN_4BYTES
|
0x00300000
|
按4字節邊界對齊數據。此標誌僅對目標文件合法。
|
IMAGE_SCN_ALIGN_8BYTES
|
0x00400000
|
按8字節邊界對齊數據。此標誌僅對目標文件合法。
|
IMAGE_SCN_ALIGN_16BYTES
|
0x00500000
|
按16字節邊界對齊數據。此標誌僅對目標文件合法。
|
IMAGE_SCN_ALIGN_32BYTES
|
0x00600000
|
按32字節邊界對齊數據。此標誌僅對目標文件合法。
|
IMAGE_SCN_ALIGN_64BYTES
|
0x00700000
|
按64字節邊界對齊數據。此標誌僅對目標文件合法。
|
IMAGE_SCN_ALIGN_128BYTES
|
0x00800000
|
按128字節邊界對齊數據。此標誌僅對目標文件合法。
|
IMAGE_SCN_ALIGN_256BYTES
|
0x00900000
|
按256字節邊界對齊數據。此標誌僅對目標文件合法。
|
IMAGE_SCN_ALIGN_512BYTES
|
0x00A00000
|
按512字節邊界對齊數據。此標誌僅對目標文件合法。
|
IMAGE_SCN_ALIGN_1024BYTES
|
0x00B00000
|
按1024字節邊界對齊數據。此標誌僅對目標文件合法。
|
IMAGE_SCN_ALIGN_2048BYTES
|
0x00C00000
|
按2048字節邊界對齊數據。此標誌僅對目標文件合法。
|
IMAGE_SCN_ALIGN_4096BYTES
|
0x00D00000
|
按4096字節邊界對齊數據。此標誌僅對目標文件合法。
|
IMAGE_SCN_ALIGN_8192BYTES
|
0x00E00000
|
按8192字節邊界對齊數據。此標誌僅對目標文件合法。
|
IMAGE_SCN_LNK_NRELOC_OVFL
|
0x01000000
|
此節包含擴展的重定位信息。
|
IMAGE_SCN_MEM_DISCARDABLE
|
0x02000000
|
此節能夠在須要時被丟棄。
|
IMAGE_SCN_MEM_NOT_CACHED
|
0x04000000
|
此節不能被緩存。
|
IMAGE_SCN_MEM_NOT_PAGED
|
0x08000000
|
此節不能被交換到頁面文件中。
|
IMAGE_SCN_MEM_SHARED
|
0x10000000
|
此節能夠在內存中共享。
|
IMAGE_SCN_MEM_EXECUTE
|
0x20000000
|
此節能夠做爲代碼執行。
|
IMAGE_SCN_MEM_READ
|
0x40000000
|
此節可讀。
|
IMAGE_SCN_MEM_WRITE
|
0x80000000
|
此節可寫。
|
偏移
|
大小
|
域
|
描述
|
0
|
4
|
VirtualAddress
|
須要進行重定位的代碼或數據的地址。這是從節開頭算起的偏移,加上節的RVA/Offset域的值。請參考4節「節表(節頭)」。例如若是節的第一個字節的地址是0x10,那麼第三個字節的地址就是0x12。
|
4
|
4
|
SymbolTableIndex
|
符號表的索引(從0開始)。這個符號給出了用於重定位的地址。若是這個指定符號的存儲類別爲節,那麼它的地址就是第一個與它同名的節的地址。
|
8
|
2
|
Type
|
重定位類型。合法的重定位類型依賴於機器類型。請參考5.2.1節「類型指示符」
|
常量
|
值
|
描述
|
IMAGE_REL_AMD64_ABSOLUTE
|
0x0000
|
重定位被忽略。
|
IMAGE_REL_AMD64_ADDR64
|
0x0001
|
重定位目標的64位VA。
|
IMAGE_REL_AMD64_ADDR32
|
0x0002
|
重定位目標的32位VA。
|
IMAGE_REL_AMD64_ADDR32NB
|
0x0003
|
不包含映像基址的32位地址(RVA)。
|
IMAGE_REL_AMD64_REL32
|
0x0004
|
相對於重定位目標的32位地址。
|
IMAGE_REL_AMD64_REL32_1
|
0x0005
|
相對於距重定位目標1字節處的32位地址。
|
IMAGE_REL_AMD64_REL32_2
|
0x0006
|
相對於距重定位目標2字節處的32位地址。
|
IMAGE_REL_AMD64_REL32_3
|
0x0007
|
相對於距重定位目標3字節處的32位地址。
|
IMAGE_REL_AMD64_REL32_4
|
0x0008
|
相對於距重定位目標4字節處的32位地址。
|
IMAGE_REL_AMD64_REL32_5
|
0x0009
|
相對於距重定位目標5字節處的32位地址。
|
IMAGE_REL_AMD64_SECTION
|
0x000A
|
包含重定位目標的節的16位索引。用於支持調試信息。
|
IMAGE_REL_AMD64_SECREL
|
0x000B
|
重定位目標相對於它所在節開頭的32位偏移。用於支持調試信息和
靜態線程局部存儲。
|
IMAGE_REL_AMD64_SECREL7
|
0x000C
|
相對於重定位目標所在節基地址的7位偏移(無符號數)。
|
IMAGE_REL_AMD64_TOKEN
|
0x000D
|
CLR
記號。
|
IMAGE_REL_AMD64_SREL32
|
0x000E
|
放入目標文件中的32位跨度依賴值(符號數)。
|
IMAGE_REL_AMD64_PAIR
|
0x000F
|
與跨度依賴值成對出現,它必須緊跟每個跨度依賴值。
|
IMAGE_REL_AMD64_SSPAN32
|
0x0010
|
連接時應用的32位跨度依賴值(符號數)。
|
常量
|
值
|
描述
|
IMAGE_REL_ARM_ABSOLUTE
|
0x0000
|
重定位被忽略。
|
IMAGE_REL_ARM_ADDR32
|
0x0001
|
重定位目標的32位VA。
|
IMAGE_REL_ARM_ADDR32NB
|
0x0002
|
重定位目標的32位RVA。
|
IMAGE_REL_ARM_BRANCH24
|
0x0003
|
重定位目標的24位相對偏移。
|
IMAGE_REL_ARM_BRANCH11
|
0x0004
|
對子程序調用的引用。這個引用由兩個16位指令與11位偏移組成。
|
IMAGE_REL_ARM_SECTION
|
0x000E
|
包含重定位目標的節的16位索引。用於支持調試信息。
|
IMAGE_REL_ARM_SECREL
|
0x000F
|
重定位目標相對於它所在節開頭的32位偏移。用於支持調試信息和
靜態線程局部存儲。
|
常量
|
值
|
描述
|
IMAGE_REL_SH3_ABSOLUTE
|
0x0000
|
重定位被忽略。
|
IMAGE_REL_SH3_DIRECT16
|
0x0001
|
對包含重定位目標符號VA的16位單元的引用。
|
IMAGE_REL_SH3_DIRECT32
|
0x0002
|
重定位目標符號的32位VA。
|
IMAGE_REL_SH3_DIRECT8
|
0x0003
|
對包含重定位目標符號VA的8位單元的引用。
|
IMAGE_REL_SH3_DIRECT8_WORD
|
0x0004
|
對包含重定位目標符號16位有效VA的8位指令的引用。
|
IMAGE_REL_SH3_DIRECT8_LONG
|
0x0005
|
對包含重定位目標符號32位有效VA的8位指令的引用。
|
IMAGE_REL_SH3_DIRECT4
|
0x0006
|
對其低4位包含重定位目標符號VA的8位單元的引用。
|
IMAGE_REL_SH3_DIRECT4_WORD
|
0x0007
|
對其低4位包含重定位目標符號16位有效VA的8位指令的引用。
|
IMAGE_REL_SH3_DIRECT4_LONG
|
0x0008
|
對其低4位包含重定位目標符號32位有效VA的8位指令的引用。
|
IMAGE_REL_SH3_PCREL8_WORD
|
0x0009
|
對包含重定位目標符號16位有效相對偏移的8位指令的引用。
|
IMAGE_REL_SH3_PCREL8_LONG
|
0x000A
|
對包含重定位目標符號32位有效相對偏移的8位指令的引用。
|
IMAGE_REL_SH3_PCREL12_WORD
|
0x000B
|
對其低12位包含重定位目標符號16位有效相對偏移的16位指令的引用。
|
IMAGE_REL_SH3_STARTOF_SECTION
|
0x000C
|
對包含重定位目標符號所在節VA的32位單元的引用。
|
IMAGE_REL_SH3_SIZEOF_SECTION
|
0x000D
|
對包含重定位目標符號所在節大小的32位單元的引用。
|
IMAGE_REL_SH3_SECTION
|
0x000E
|
包含重定位目標的節的16位索引。用於支持調試信息。
|
IMAGE_REL_SH3_SECREL
|
0x000F
|
重定位目標相對於它所在節開頭的32位偏移。用於支持調試信息和
靜態線程局部存儲。
|
IMAGE_REL_SH3_DIRECT32_NB
|
0x0010
|
重定位目標符號的32位RVA。
|
IMAGE_REL_SH3_GPREL4_LONG
|
0x0011
|
與
GP
相關。
|
IMAGE_REL_SH3_TOKEN
|
0x0012
|
CLR
記號。
|
IMAGE_REL_SHM_PCRELPT
|
0x0013
|
距當前指令的偏移(長字)。若是沒有設置IMAGE_REL_SHM_NOMODE標誌,那麼將低位取反插入到第32位以選擇PTA指令或PTB指令。
|
IMAGE_REL_SHM_REFLO
|
0x0014
|
32
位地址的低16位。
|
IMAGE_REL_SHM_REFHALF
|
0x0015
|
32
位地址的高16位。
|
IMAGE_REL_SHM_RELLO
|
0x0016
|
相對地址的低16位。
|
IMAGE_REL_SHM_RELHALF
|
0x0017
|
相對地址的高16位。
|
IMAGE_REL_SHM_PAIR
|
0x0018
|
只有緊跟
IMAGE_REL_SHM_
REFHALF
、
IMAGE_REL_SHM_
RELLO
或
IMAGE_REL_SHM_
RELHALF
類型的重定位項時這種重定位類型纔是合法的。此重定位項的SymbolTableIndex域包含的是偏移而不是符號表的索引。
|
IMAGE_REL_SHM_NOMODE
|
0x8000
|
重定位忽略節模式。
|
常量
|
值
|
描述
|
IMAGE_REL_PPC_ABSOLUTE
|
0x0000
|
重定位被忽略。
|
IMAGE_REL_PPC_ADDR64
|
0x0001
|
重定位目標的64位VA。
|
IMAGE_REL_PPC_ADDR32
|
0x0002
|
重定位目標的32位VA。
|
IMAGE_REL_PPC_ADDR24
|
0x0003
|
重定位目標VA的低24位。只有當重定位目標符號是絕對符號且能夠按符號擴展到它的原始值時纔是合法的。
|
IMAGE_REL_PPC_ADDR16
|
0x0004
|
重定位目標VA的低16位。
|
IMAGE_REL_PPC_ADDR14
|
0x0005
|
重定位目標VA的低14位。只有當重定位目標符號是絕對符號且能夠按符號擴展到它的原始值時纔是合法的。
|
IMAGE_REL_PPC_REL24
|
0x0006
|
符號位置相對於PC的24位偏移。
|
IMAGE_REL_PPC_REL14
|
0x0007
|
符號位置相對於PC的14位偏移。
|
IMAGE_REL_PPC_ADDR32NB
|
0x000A
|
重定位目標的32位RVA。
|
IMAGE_REL_PPC_SECREL
|
0x000B
|
重定位目標相對於它所在節開頭的32位偏移。用於支持調試信息和
靜態線程局部存儲。
|
IMAGE_REL_PPC_SECTION
|
0x000C
|
包含重定位目標的節的16位索引。用於支持調試信息。
|
IMAGE_REL_PPC_SECREL16
|
0x000F
|
重定位目標相對於它所在節開頭的16位偏移。用於支持調試信息和
靜態線程局部存儲。
|
IMAGE_REL_PPC_REFHI
|
0x0010
|
重定位目標32位VA的高16位。它用於加載一個完整地址所需的兩指令序列中的第一條指令。這種重定位類型後面必須緊跟IMAGE_REL_PPC_PAIR類型的重定位項,然後者的SymbolTableIndex域包含的是一個16位偏移(符號數),這個偏移要被加到重定位目標位置的高16位。
|
IMAGE_REL_PPC_REFLO
|
0x0011
|
重定位目標VA的低16位。
|
IMAGE_REL_PPC_PAIR
|
0x0012
|
只有緊跟
IMAGE_REL_PPC_REFHI
或
IMAGE_REL_PPC_SECREL
HI
類型的重定位時這種重定位類型纔是合法的。此重定位項的SymbolTableIndex域包含的是偏移而不是符號表的索引。
|
IMAGE_REL_PPC_SECRELLO
|
0x0013
|
重定位目標相對於它所在節開頭的32位偏移的低16位。
|
IMAGE_REL_PPC_SECREL
HI
|
0x001
4
|
重定位目標相對於它所在節開頭的32位偏移的高16位。
|
IMAGE_REL_PPC_GPREL
|
0x0015
|
重定位目標相對於GP寄存器的16位偏移(帶符號數)。
|
IMAGE_REL_PPC_TOKEN
|
0x0016
|
CLR
記號。
|
常量
|
值
|
描述
|
IMAGE_REL_I386_ABSOLUTE
|
0x0000
|
重定位被忽略。
|
IMAGE_REL_I386_DIR16
|
0x0001
|
不支持。
|
IMAGE_REL_I386_REL16
|
0x0002
|
不支持。
|
IMAGE_REL_I386_DIR32
|
0x0006
|
重定位目標的32位VA。
|
IMAGE_REL_I386_DIR32NB
|
0x0007
|
重定位目標的32位RVA。
|
IMAGE_REL_I386_SEG12
|
0x0009
|
不支持。
|
IMAGE_REL_I386_SECTION
|
0x000A
|
包含重定位目標的節的16位索引。用於支持調試信息。
|
IMAGE_REL_I386_SECREL
|
0x000B
|
重定位目標相對於它所在節開頭的32位偏移。用於支持調試信息和
靜態線程局部存儲。
|
IMAGE_REL_I386_TOKEN
|
0x000C
|
CLR
記號。
|
IMAGE_REL_I386_SECREL7
|
0x000D
|
相對於重定位目標所在節基地址的7位偏移。
|
IMAGE_REL_I386_REL32
|
0x0014
|
重定位目標的32位相對偏移。用於支持x86的相對分支和CALL指令。
|
常量
|
值
|
描述
|
IMAGE_REL_IA64_ABSOLUTE
|
0x0000
|
重定位被忽略。
|
IMAGE_REL_IA64_IMM14
|
0x0001
|
這種指令重定位後面能夠跟着
IMAGE_REL_IA64_ADDEND
類型的重定位項,然後者的值在被插入到IMM14指令包的指定的指令槽中以前被加到目標地址上。這種重定位目標必須是絕對符號,不然這個映像必須被修正。
|
IMAGE_REL_IA64_IMM22
|
0x0002
|
這種指令重定位後面能夠跟着
IMAGE_REL_IA64_ADDEND
類型的重定位項,然後者的值在被插入到IMM22指令包的指定的指令槽中以前被加到目標地址上。這種重定位目標必須是絕對符號,不然這個映像必須被修正。
|
IMAGE_REL_IA64_IMM64
|
0x0003
|
這種重定位項的指令槽編號必須爲1。這種重定位後面能夠跟着
IMAGE_REL_IA64_ADDEND
類型的重定位項,然後者的值在被
存儲
到IMM64指令包的三個指令槽中以前被加到目標地址上。
|
IMAGE_REL_IA64_DIR32
|
0x0004
|
重定位目標的32位VA。僅支持使用
/LARGEADDRESSAWARE:NO
連接器選項生成的映像。
|
IMAGE_REL_IA64_DIR64
|
0x0005
|
重定位目標的64位VA。
|
IMAGE_REL_IA64_PCREL21B
|
0x0006
|
使用按16位邊界對齊的重定位目標的25位相對偏移來修正指令。這個偏移的低4位全爲0,所以並無被存儲。
|
IMAGE_REL_IA64_PCREL21M
|
0x0007
|
使用按16位邊界對齊的重定位目標的25位相對偏移來修正指令。這個偏移的低4位全爲0,所以並無被存儲。
|
IMAGE_REL_IA64_PCREL21F
|
0x0008
|
這種重定位目標偏移的LSB部分包含的是指令槽編號,其他部分包含的是指令包的地址。
使用按16位邊界對齊的重定位目標的25位相對偏移來修正指令。這個偏移的低4位全爲0,所以並無被存儲。
|
IMAGE_REL_IA64_GPREL22
|
0x0009
|
這種指令重定位後面能夠跟着
IMAGE_REL_IA64_ADDEND
類型的重定位項,後者的值被加到目標地址上,然後計算
GPREL22
指令包相對於GP的偏移並應用。
|
IMAGE_REL_IA64_LTOFF22
|
0x000A
|
使用重定位目標符號的常量表項相對於GP的22位偏移來修正指令。連接器根據這個重定位項以及可能跟着它的IMAGE_REL_IA64_ADDEND類型的重定位項來建立這個常量表項。
|
IMAGE_REL_IA64_SECTION
|
0x000B
|
包含重定位目標的節的16位索引。用於支持調試信息。
|
IMAGE_REL_IA64_SECREL22
|
0x000C
|
使用重定位目標相對於它所在節開頭的22位偏移來修正指令。這種類型的重定位項後面能夠緊跟着IMAGE_REL_IA64_ADDEND類型的重定位項,後者的Value域包含重定位目標相對於它所在節開頭的32位偏移(無符號數)。
|
IMAGE_REL_IA64_SECREL64I
|
0x000D
|
這種重定位項的指令槽編號必須爲1。
使用重定位目標相對於它所在節開頭的64位偏移來修正指令。這種類型的重定位項後面能夠緊跟着IMAGE_REL_IA64_ADDEND類型的重定位項,後者的Value域包含重定位目標相對於它所在節開頭的32位偏移(無符號數)。
|
IMAGE_REL_IA64_SECREL32
|
0x000E
|
使用重定位目標相對於它所在節開頭的32位偏移來修正的數據的地址。
|
IMAGE_REL_IA64_LTOFF
64
|
0x000
F
|
|
IMAGE_REL_IA64_DIR32NB
|
0x0010
|
目標的32位RVA。
|
IMAGE_REL_IA64_SREL14
|
0x0011
|
用於包含兩個重定位目標之差的14位當即數(符號數)。對於連接器來講這是一個說明域,代表編譯器已經生成了這個值。
|
IMAGE_REL_IA64_SREL22
|
0x0012
|
用於包含兩個重定位目標之差的22位當即數(符號數)。對於連接器來講這是一個說明域,代表編譯器已經生成了這個值。
|
IMAGE_REL_IA64_SREL32
|
0x0013
|
用於包含兩個重定位目標之差的32位當即數(符號數)。對於連接器來講這是一個說明域,代表編譯器已經生成了這個值。
|
IMAGE_REL_IA64_UREL32
|
0x0014
|
用於包含兩個重定位目標之差的32位當即數(無符號數)。對於連接器來講這是一個說明域,代表編譯器已經生成了這個值。
|
IMAGE_REL_IA64_PCREL60X
|
0x0015
|
相對於PC的60位修正,用於MLX指令包的BRL指令。
|
IMAGE_REL_IA64_PCREL60B
|
0x0016
|
相對於PC的60位修正。若是重定位目標偏移不超過一個25位域所能表示的範圍(符號數),那麼就在1號指令槽中使用NOP.B指令、2號指令槽中使用25位(最低4位全爲0,捨棄)的BR指令將整個指令包轉換成MBB指令包。
|
IMAGE_REL_IA64_PCREL60F
|
0x0017
|
相對於PC的60位修正。若是重定位目標偏移不超過一個25位域所能表示的範圍(符號數),那麼就在1號指令槽中使用NOP.F指令、2號指令槽中使用25位(最低4位全爲0,捨棄)的BR指令將整個指令包轉換成MFB指令包。
|
IMAGE_REL_IA64_PCREL60I
|
0x0018
|
相對於PC的60位修正。若是重定位目標偏移不超過一個25位域所能表示的範圍(符號數),那麼就在1號指令槽中使用NOP.I指令、2號指令槽中使用25位(最低4位全爲0,捨棄)的BR指令將整個指令包轉換成MIB指令包。
|
IMAGE_REL_IA64_PCREL60M
|
0x0019
|
相對於PC的60位修正。若是重定位目標偏移不超過一個25位域所能表示的範圍(符號數),那麼就在1號指令槽中使用NOP.M指令、2號指令槽中使用25位(最低4位全爲0,捨棄)的BR指令將整個指令包轉換成MMB指令包。
|
IMAGE_REL_IA64_IMMGPREL64
|
0x001
A
|
相對於GP的64位修正。
|
IMAGE_REL_IA64_TOKEN
|
0x001
B
|
CLR
記號。
|
IMAGE_REL_IA64_GPREL32
|
0x001
C
|
相對於GP的32位修正。
|
IMAGE_REL_IA64_ADDEND
|
0x001F
|
只有緊跟下列類型的重定位時這種重定位類型纔是合法的:
IMAGE_REL_IA64_
IMM14
、
IMAGE_REL_IA64_
IMM22
、
IMAGE_REL_IA64_
IMM64
、
IMAGE_REL_IA64_
GPREL22
、
IMAGE_REL_IA64_
LTOFF22
、
IMAGE_REL_IA64_
LTOFF64
、
IMAGE_REL_IA64_
SECREL22
、
IMAGE_REL_IA64_
SECREL64I
或
IMAGE_REL_IA64_
SECREL32
。它的值是應用到指令包中的指令上的加數,而不是用於數據。
|
常量
|
值
|
描述
|
IMAGE_REL_MIPS_ABSOLUTE
|
0x0000
|
重定位被忽略。
|
IMAGE_REL_MIPS_REFHALF
|
0x0001
|
重定位目標32位VA的高16位。
|
IMAGE_REL_MIPS_REFWORD
|
0x0002
|
重定位目標的32位VA。
|
IMAGE_REL_MIPS_JMPADDR
|
0x0003
|
重定位目標VA的低26位。用於支持MIPS平臺的J和JAL指令。
|
IMAGE_REL_MIPS_REFHI
|
0x0004
|
重定位目標32位VA的高16位。它用於加載一個完整地址所需的兩指令序列中的第一條指令。這種重定位類型後面必須緊跟IMAGE_REL_MIPS_PAIR類型的重定位項,然後者的SymbolTableIndex域包含的是一個16位偏移(符號數),這個偏移要被加到重定位目標位置的高16位。
|
IMAGE_REL_MIPS_REFLO
|
0x0005
|
重定位目標VA的低16位。
|
IMAGE_REL_MIPS_GPREL
|
0x0006
|
重定位目標相對於GP寄存器的16位偏移(符號數)。
|
IMAGE_REL_MIPS_LITERAL
|
0x0007
|
與
IMAGE_REL_MIPS_GPREL
相同。
|
IMAGE_REL_MIPS_SECTION
|
0x000A
|
包含重定位目標的節的16位索引。用於支持調試信息。
|
IMAGE_REL_MIPS_SECREL
|
0x000B
|
重定位目標相對於它所在節開頭的32位偏移。用於支持調試信息和
靜態線程局部存儲。
|
IMAGE_REL_MIPS_SECRELLO
|
0x000C
|
重定位目標相對於它所在節開頭的32位偏移的低16位。
|
IMAGE_REL_MIPS_SECRELHI
|
0x000D
|
重定位目標
相對於它所在節開頭的
32
位VA的高16位。這種重定位類型後面必須緊跟
IMAGE_REL_MIPS_PAIR
類型的重定位項,然後者的SymbolTableIndex域包含的是一個16位偏移(符號數),這個偏移要被加到重定位符號位置的高16位。
|
IMAGE_REL_MIPS_JMPADDR16
|
0x0010
|
重定位目標VA的低26位。用於支持MIPS16的JAL指令。
|
IMAGE_REL_MIPS_REFWORDNB
|
0x0022
|
重定位目標的32位RVA。
|
IMAGE_REL_MIPS_PAIR
|
0x0025
|
只有緊跟
IMAGE_REL_MIPS_REFHI
或
IMAGE_REL_MIPS_SECRELHI
類型的重定位時這種重定位類型纔是合法的。此重定位項的SymbolTableIndex域包含的是偏移而不是符號表索引。
|
常量
|
值
|
描述
|
IMAGE_REL_M32R_ABSOLUTE
|
0x0000
|
重定位被忽略。
|
IMAGE_REL_M32R_ADDR32
|
0x0001
|
重定位目標的32位VA。
|
IMAGE_REL_M32R_ADDR32NB
|
0x0002
|
重定位目標的32位RVA。
|
IMAGE_REL_M32R_ADDR24
|
0x0003
|
重定位目標的24位VA。
|
IMAGE_REL_M32R_GPREL16
|
0x0004
|
重定位目標相對於GP寄存器的16位偏移。
|
IMAGE_REL_M32R_PCREL24
|
0x0005
|
重定位目標相對於程序計數器(PC)的24位偏移,已經左移2位並按符號擴展。
|
IMAGE_REL_M32R_PCREL16
|
0x0006
|
重定位目標相對於PC的16位偏移,已經左移2位並按符號擴展。
|
IMAGE_REL_M32R_PCREL8
|
0x0007
|
重定位目標相對於PC的8位偏移,已經左移2位並按符號擴展。
|
IMAGE_REL_M32R_REFHALF
|
0x0008
|
重定位目標VA的16位MSB。
|
IMAGE_REL_M32R_REFHI
|
0x0009
|
重定位目標VA的16位MSB,已經按LSB符號擴展調整。它用於加載一個完整的32位地址所需的兩指令序列中的第一條指令。這種重定位類型後面必須緊跟IMAGE_REL_M32R_PAIR類型的重定位項,然後者的SymbolTableIndex域包含的是一個16位偏移(符號數),這個偏移要被加到重定位符號位置的高16位。
|
IMAGE_REL_M32R_REFLO
|
0x000A
|
重定位目標VA的16位LSB。
|
IMAGE_REL_M32R_PAIR
|
0x000B
|
這種類型的重定位必須緊跟類型爲
IMAGE_REL_M32R_REFHI
的重定位項。此重定位項的SymbolTableIndex域包含的是偏移而不是符號表索引。
|
IMAGE_REL_M32R_SECTION
|
0x000C
|
包含重定位目標的節的16位索引。用於支持調試信息。
|
IMAGE_REL_M32R_SECREL
|
0x000D
|
重定位目標相對於它所在節開頭的32位偏移。用於支持調試信息和
靜態線程局部存儲。
|
IMAGE_REL_M32R_TOKEN
|
0x000E
|
CLR
記號。
|
偏移
|
大小
|
域
|
描述
|
0
|
4
|
Type (*)
|
這是由
SymbolTableIndex
和
VirtualAddress
兩個域組成的共用體。使用
SymbolTableIndex
仍是
RVA
依賴於
Linenumber
域的值。
|
4
|
2
|
Linenumber
|
若是此值非零,那麼它表示行號(從1開始)。若是它爲零,那麼Type域表示一個函數在符號表中的索引。
|
偏移
|
大小
|
域
|
描述
|
0
|
4
|
SymbolTableIndex
|
當Linenumber
爲零時使用此域,它表示一個函數在符號表中的索引。此格式用來指明一組行號記錄與哪一個函數相關。
|
0
|
4
|
VirtualAddress
|
當Linenumber非零時使用此域,它表示與源代碼中由Linenumber指定的那行代碼對應的可執行代碼的RVA。在目標文件中,它表示節中的VA。
|
偏移
|
大小
|
域
|
描述
|
0
|
8
|
Name (*)
|
符號名稱,這是一個由三個成員組成的共用體。若是名稱的長度不超過8個字節,那麼它就是一個8字節長的數組。要獲取更多信息,請參考5.4.1節「符號名稱表示」。
|
8
|
4
|
Value
|
與符號相關的值。其意義依賴於
SectionNumber
和
StorageClass
這
兩個域。它一般表示可重定位的地址。
|
12
|
2
|
SectionNumber
|
這個帶符號整數是節表的索引(從1開始),用以標識定義此符號的節。一些值有特殊的含義,詳細信息請參考5.4.2節「
SectionNumber
域的
值」。
|
14
|
2
|
Type
|
一個表示類型的數字。Microsoft的工具將它設置爲0x20(若是是函數)或者0x0(若是不是函數)。要獲取更多信息,請參考5.4.3節「類型表示」。
|
16
|
1
|
StorageClass
|
這是一個表示存儲類別的枚舉類型值。要獲取更多信息,請參考5.4.4節「存儲類別」。
|
17
|
1
|
NumberOfAuxSymbols
|
跟在本記錄後面的輔助符號表項的個數。
|
偏移
|
大小
|
域
|
描述
|
0
|
8
|
ShortName
|
8
字節長的數組。若是名稱長度小於8字節,在它的右邊用NULL填充。
|
0
|
4
|
Zeroes
|
若是名稱長度大於8字節,那麼這個域被設置爲全0。
|
4
|
4
|
Offset
|
字符串表中的一個偏移地址。
|
常量
|
值
|
描述
|
IMAGE_SYM_UNDEFINED
|
0
|
還沒有爲此符號記錄分配一個節。這個零值代表引用了一個定義在其它地方的外部符號;而非零值則代表是一個普通符號,其大小由Value域給出。
|
IMAGE_SYM_ABSOLUTE
|
-1
|
此符號是個絕對符號(不可重定位),而且不是地址。
|
IMAGE_SYM_DEBUG
|
-2
|
此符號提供普通類型信息或者調試信息,但它並不對應於某一個節。Microsoft的工具將.file記錄(存儲類別爲FILE)設置爲這個值。
|
MSB
|
LSB
|
複雜類型:無、指針、函數、數組。
|
基本類型:整數、浮點數等。
|
常量
|
值
|
描述
|
IMAGE_SYM_TYPE_NULL
|
0
|
類型信息不存在,或者是未知的基本類型。Microsoft的工具使用這個值。
|
IMAGE_SYM_TYPE_VOID
|
1
|
不是合法類型;用於void指針和函數。
|
IMAGE_SYM_TYPE_CHAR
|
2
|
字符(帶符號的1個字節)。
|
IMAGE_SYM_TYPE_SHORT
|
3
|
長度爲2個字節的帶符號整數。
|
IMAGE_SYM_TYPE_INT
|
4
|
天然的整數類型(在Windows中一般爲4個字節)。
|
IMAGE_SYM_TYPE_LONG
|
5
|
長度爲4個字節的帶符號整數。
|
IMAGE_SYM_TYPE_FLOAT
|
6
|
長度爲4個字節的浮點數。
|
IMAGE_SYM_TYPE_DOUBLE
|
7
|
長度爲8個字節的浮點數。
|
IMAGE_SYM_TYPE_STRUCT
|
8
|
結構體。
|
IMAGE_SYM_TYPE_UNION
|
9
|
共用體。
|
IMAGE_SYM_TYPE_ENUM
|
10
|
枚舉類型。
|
IMAGE_SYM_TYPE_MOE
|
11
|
枚舉類型成員(具體值)。
|
IMAGE_SYM_TYPE_BYTE
|
12
|
字節;長度爲1個字節的無符號整數。
|
IMAGE_SYM_TYPE_WORD
|
13
|
字;長度兩個字節的無符號整數。
|
IMAGE_SYM_TYPE_UINT
|
14
|
長度爲天然尺寸的無符號整數(一般爲4個字節)。
|
IMAGE_SYM_TYPE_DWORD
|
15
|
長度爲4個字節的無符號整數。
|
常量
|
值
|
描述
|
IMAGE_SYM_DTYPE_NULL
|
0
|
非導出類型;此符號是簡單的標量變量。
|
IMAGE_SYM_DTYPE_POINTER
|
1
|
此符號是指向基本類型的指針。
|
IMAGE_SYM_DTYPE_FUNCTION
|
2
|
此符號是返回基本類型的函數。
|
IMAGE_SYM_DTYPE_ARRAY
|
3
|
此符號是由基本類型組成的數組。
|
常量
|
值
|
描述以及對Value域的解釋
|
IMAGE_SYM_CLASS_END_OF_FUNCTION
|
-1
(0xFF)
|
表示函數結尾的特殊符號,用於調試。
|
IMAGE_SYM_CLASS_NULL
|
0
|
未被賦予存儲類別。
|
IMAGE_SYM_CLASS_AUTOMATIC
|
1
|
自動(堆棧)變量。Value域指出此變量在棧幀中的偏移。
|
IMAGE_SYM_CLASS_EXTERNAL
|
2
|
Microsoft
的工具使用此值來表示外部符號。若是SectionNumber域爲0(IMAGE_SYM_UNDEFINED),那麼Value域給出大小;若是SectionNumber 域不爲0,那麼Value域給出節中的偏移。
|
IMAGE_SYM_CLASS_STATIC
|
3
|
符號在節中的偏移。若是Value域爲0,那麼此符號表示節名。
|
IMAGE_SYM_CLASS_REGISTER
|
4
|
寄存器變量。Value域給出寄存器編號。
|
IMAGE_SYM_CLASS_EXTERNAL_DEF
|
5
|
在外部定義的符號。
|
IMAGE_SYM_CLASS_LABEL
|
6
|
模塊中定義的代碼標號。Value域給出此符號在節中的偏移。
|
IMAGE_SYM_CLASS_UNDEFINED_LABEL
|
7
|
引用的未定義的代碼標號。
|
IMAGE_SYM_CLASS_MEMBER_OF_STRUCT
|
8
|
結構體成員。Value域指出是第幾個成員。
|
IMAGE_SYM_CLASS_ARGUMENT
|
9
|
函數的形式參數(形參)。Value域指出是第幾個參數。
|
IMAGE_SYM_CLASS_STRUCT_TAG
|
10
|
結構體名。
|
IMAGE_SYM_CLASS_MEMBER_OF_UNION
|
11
|
共用體成員。Value域指出是第幾個成員。
|
IMAGE_SYM_CLASS_UNION_TAG
|
12
|
共用體名。
|
IMAGE_SYM_CLASS_TYPE_DEFINITION
|
13
|
Typedef
項
。
|
IMAGE_SYM_CLASS_UNDEFINED_STATIC
|
14
|
靜態數據聲明。
|
IMAGE_SYM_CLASS_ENUM_TAG
|
15
|
枚舉類型名。
|
IMAGE_SYM_CLASS_MEMBER_OF_ENUM
|
16
|
枚舉類型成員。Value域指出是第幾個成員。
|
IMAGE_SYM_CLASS_REGISTER_PARAM
|
17
|
寄存器參數。
|
IMAGE_SYM_CLASS_BIT_FIELD
|
18
|
位域。Value域指出是位域中的第幾個位。
|
IMAGE_SYM_CLASS_BLOCK
|
100
|
.bb
(
beginning of block
,塊開頭
)
或
.eb記錄
(
end of block
,塊結尾)。Value域是代碼位置,它是一個可重定位的地址。
|
IMAGE_SYM_CLASS_FUNCTION
|
101
|
Microsoft
的工具用此值來表示定義函數範圍的符號記錄,這些符號記錄分別是:
.bf
(begin fu
nction
,函數開頭)、
.ef
(
end function
,函數結尾)以及
.lf
(
lines in function
,函數中的行)。對於.lf 記錄來講,Value域給出了源代碼中此函數所佔的行數。對於.ef記錄來講,Value域給出了函數代碼的大小。
|
IMAGE_SYM_CLASS_END_OF_STRUCT
|
102
|
結構體末尾。
|
IMAGE_SYM_CLASS_FILE
|
103
|
Microsoft
的工具以及傳統COFF格式都使用此值來表示源文件符號記錄。這種符號表記錄後面跟着給出文件名的輔助符號表記錄。
|
IMAGE_SYM_CLASS_SECTION
|
104
|
節的定義(Microsoft的工具使用STATIC存儲類別代替)。
|
IMAGE_SYM_CLASS_WEAK_EXTERNAL
|
105
|
弱外部符號。要獲取更多信息,請參考5.5.3節「輔助符號表記錄格式之三:弱外部符號」。
|
IMAGE_SYM_CLASS_CLR_TOKEN
|
107
|
表示CLR記號的符號。它的名稱是這個記號的十六進制值的ASCII碼錶示。要獲取更多信息,請參考5.5.7節「CLR記號定義」。
|
偏移
|
大小
|
域
|
描述
|
0
|
4
|
TagIndex
|
相應的.bf(函數開頭)記錄在符號表中的索引。
|
4
|
4
|
TotalSize
|
函數經編譯後生成的可執行代碼的大小。若是此函數單獨成節,那麼根據對齊值的不一樣,節頭中的SizeOfRawData域可能大於或等於這個域。
|
8
|
4
|
PointerToLinenumber
|
若是此函數存在行號記錄,那麼這個值表示它的第一個COFF行號記錄的文件偏移;若是不存在,那麼這個值爲0。要獲取更多信息,請參考5.3節「COFF行號信息(不同意使用)」。
|
12
|
4
|
PointerToNextFunction
|
對應於下一個函數的符號表記錄在符號表中的索引。若是此函數是符號表中的最後一個函數,那麼這個域的值爲0。
|
16
|
2
|
未用
|
偏移
|
大小
|
域
|
描述
|
0
|
4
|
未用
|
|
4
|
2
|
Linenumber
|
源文件中實際的行號,按順序排列(一、二、3等等)。.bf和.ef記錄都使用這個域。
|
6
|
6
|
未用
|
|
12
|
4
|
PointerToNextFunction
(僅用於
.bf
符號表記錄)
|
下一個.bf符號表記錄在符號表中的索引。若是此函數是符號表中的最後一個函數,那麼這個域的值爲0。.ef記錄並不使用這個域。
|
16
|
2
|
未用
|
偏移
|
大小
|
域
|
描述
|
0
|
4
|
TagIndex
|
sym2
在符號表中的索引。若是連接時找不到sym1就用它代替。
|
4
|
4
|
Characteristics
|
若是這個值爲
IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY
,代表連接時不在庫中查找sym1。
若是這個值爲
IMAGE_WEAK_EXTERN_SEARCH_LIBRARY
,代表連接時在庫中查找sym1。
若是這個值爲
IMAGE_WEAK_EXTERN_SEARCH_ALIAS
,代表sym1是sym2的別名。
|
8
|
10
|
未用
|
偏移
|
大小
|
域
|
描述
|
0
|
18
|
File Name
|
表示源文件名的ANSI字符串。若是源文件名的長度小於最大長度,用NULL填充。
|
偏移
|
大小
|
域
|
描述
|
0
|
4
|
Length
|
節中數據的大小。與節頭的
SizeOfRawData
域同樣。
|
4
|
2
|
NumberOfRelocations
|
此節中重定位項的數目。
|
6
|
2
|
NumberOfLinenumbers
|
此節中行號信息項的數目。
|
8
|
4
|
CheckSum
|
公共數據的校驗和。只有節頭中設置了IMAGE_SCN_LNK_COMDAT標誌時才使用此域。要獲取更多信息,請參考5.5.6節「COMDAT節(僅適用於目標文件)」。
|
12
|
2
|
Number
|
與此節相關的節在節表中的索引(從1開始)。當COMDAT的Selection域
爲5時才使用這個域。
|
14
|
1
|
Selection
|
表示COMDAT選擇方式的數字。
這個域只用於
COMDAT
節。
|
15
|
3
|
未用
|
常量
|
值
|
描述
|
IMAGE_COMDAT_SELECT_NODUPLICATES
|
1
|
若是此符號已經被定義過,連接器將生成一個「
multiply defined symbol
(符號多重定義)」錯誤。
|
IMAGE_COMDAT_SELECT_ANY
|
2
|
連接器從這些定義同一個COMDAT符號的節中任選一個,其他(未被選中)的節都被移除。
|
IMAGE_COMDAT_SELECT_SAME_SIZE
|
3
|
連接器從定義這個符號的多個節中任選一個。若是全部這些定義大小不等,連接器將生成一個「符號多重定義」錯誤。
|
IMAGE_COMDAT_SELECT_EXACT_MATCH
|
4
|
連接器從定義這個符號的多個節中任選一個。若是全部這些定義不嚴格一致,連接器將生成一個「符號多重定義」錯誤。
|
IMAGE_COMDAT_SELECT_ASSOCIATIVE
|
5
|
若是「其它某個」COMDAT節被連接的話,此節也要被連接。這裏的「其它某個」節由與定義此節的符號表記錄相關的輔助符號表記錄的Number域給出。這個設置對於那些在多個節中都有其相關部分(例如代碼在一個節中而數據在另外一個節中)但必須做爲一個總體進行連接或丟棄的定義很是有用。與此節關聯的這個「其它某個」節必須也是COMDAT節而且它不能再與其它COMDAT節關聯(也就是說,這個「其它某個」節不能將Selection域設置爲IMAGE_COMDAT_SELECT_ASSOCIATIVE)。
|
IMAGE_COMDAT_SELECT_LARGEST
|
6
|
連接器從這個符號的全部定義中選取長度最大的進行連接。若是長度最大的不止一個,那麼就在這幾個最大的中任選一個。
|
偏移
|
大小
|
域
|
描述
|
0
|
1
|
bAuxType
|
必須爲
IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF
(1)。
|
1
|
1
|
bReserved
|
保留,必須爲0。
|
2
|
4
|
SymbolTableIndex
|
此CLR記號定義涉及的COFF符號在符號表中的索引。
|
6
|
12
|
保留,必須爲0。
|
偏移
|
大小
|
域
|
描述
|
0
|
4
|
dwLength
|
指出
bCertificate
域的長度。
|
4
|
2
|
wRevision
|
證書版本號。要獲取詳細信息,請參考本表後面的內容。
|
6
|
2
|
wCertificateType
|
指出
bCertificate
內容的類型。要獲取詳細信息,請參考本表後面的內容。
|
8
|
參考後面的內容
|
bCertificate
|
這個域包含一個證書,例如Authenticode簽名。要獲取詳細信息,請參考本表後面的內容。
|
值
|
名稱
|
注意
|
0x0100
|
WI
N_CERT_REVISION_1_0
|
版本1,
WIN_CERTIFICATE
結構的遺留版本。支持它只是爲了校驗之前的Authenticode簽名。
|
0x0200
|
WIN_CERT_REVISION_2_0
|
版本2是
WIN_CERTIFICATE
結構的當前版本。
|
值
|
名稱
|
注意
|
0x0001
|
WIN_CERT_TYPE_X509
|
bCertificate
包含的是
X.509
證書。不支持。
|
0x0002
|
WIN_CERT_TYPE_PKCS_SIGNED_DATA
|
bCertificate
包含的是
PKCS#7 SignedData
結構。
|
0x0003
|
WIN_CERT_TYPE_RESERVED_1
|
保留。
|
0x0004
|
WIN_CERT_TYPE_TS_STACK_SIGNED
|
終端服務器協議棧證書籤名。不支持。
|
偏移
|
大小
|
域
|
描述
|
0
|
4
|
Attributes
|
必須爲0。
|
4
|
4
|
Name
|
被加載DLL名稱的RVA。這個名稱位於映像文件的只讀數據節中。
|
8
|
4
|
Module Handle
|
被延遲加載DLL模塊句柄(在映像的數據節中)的RVA。它供管理延遲加載的例程存儲之用。
|
12
|
4
|
Delay Import Address Table
|
延遲加載導入地址表的RVA。要獲取更多信息,請參考5.8.5節「延遲導入地址表(IAT)」。
|
16
|
4
|
Delay Import Name Table
|
延遲加載名稱表的RVA。這個表包含了須要被加載的導入符號的名稱。它與導入名稱表的格式一致。要獲取更多信息,請參考6.4.3節「提示/名稱表」。
|
20
|
4
|
Bound Delay Import Table
|
綁定延遲加載地址表(若是存在)的RVA。
|
24
|
4
|
Unload Delay Import Table
|
卸載延遲加載地址表(若是存在)的RVA。這個表是延遲導入地址表的精確副本。若是調用者卸載了這個DLL,應該將這個表複製回去以覆蓋延遲導入地址表,以便後續對這個DLL的調用能夠繼續正確地使用形實轉換機制。
|
28
|
4
|
Time Stamp
|
此映像綁定到的DLL的時間戳。
|
節名
|
內容
|
特徵
|
.bss
|
未初始化的數據(自由格式)
|
IMAGE_SCN_CNT_UNINITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE
|
.cormeta
|
CLR
元數據,它代表目標文件中包含託管代碼
|
IMAGE_SCN_LNK_INFO
|
.data
|
已初始化的數據(自由格式)
|
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE
|
.debug$F
|
生成的FPO調試信息(僅適用於目標文件,僅用於x86平臺,現已被捨棄)
|
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_DISCARDABLE
|
.debug$P
|
預編譯的調試類型信息(僅適用於目標文件)
|
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_DISCARDABLE
|
.debug$S
|
調試符號信息(僅適
用於目標文件)
|
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_DISCARDABLE
|
.debug$T
|
調試類型信息(僅適用於目標文件)
|
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_DISCARDABLE
|
.drectve
|
連接器選項
|
IMAGE_SCN_LNK_INFO
|
.edata
|
導出表
|
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ
|
.idata
|
導入表
|
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE |
.idlsym
|
包含已註冊的SEH(僅適用於映像文件),它們用以支持IDL屬性。要獲取更多信息,請參考本規範最後「參考信息」中的「IDL屬性」。
|
IMAGE_SCN_LNK_INFO
|
.pdata
|
異常信息
|
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ
|
.rdata
|
只讀的已初始化數據
|
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ
|
.reloc
|
映像文件的重定位信息
|
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_DISCARDABLE
|
.rsrc
|
資源目錄
|
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ
|
.sbss
|
與GP相關的未初始化數據(自由格式)
|
IMAGE_SCN_CNT_UNINITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE | IMAGE _SCN_GPREL 其中 IMAGE_SCN_GPREL 標誌僅用於IA64平臺,不能用於其它平臺。此標誌只能用於目標文件。當映像文件中出現這種類型的節時,必定不能設置這個標誌。 |
.sdata
|
與GP相關的已初始化數據(自由格式)
|
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE | IMAGE _SCN_GPREL 其中 IMAGE_SCN_GPREL 標誌僅用於IA64平臺,不能用於其它平臺。此標誌只能用於目標文件。當映像文件中出現這種類型的節時,必定不能設置這個標誌。 |
.srdata
|
與GP相關的只讀數據(自由格式)
|
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE _SCN_GPREL 其中 IMAGE_SCN_GPREL 標誌僅用於IA64平臺,不能用於其它平臺。此標誌只能用於目標文件。當映像文件中出現這種類型的節時,必定不能設置這個標誌。 |
.sxdata
|
已註冊的異常處理程序數據(自由格式,僅適用於目標文件,僅用於x86平臺)
|
IMAGE_SCN_LNK_INFO 這個節中包含目標文件中的代碼所涉及到的全部異常處理程序在符號表中的索引。這些符號能夠是IMAGE_SYM_UNDEFINED類型的符號,也能夠是定義在那個模塊中的符號。 |
.text
|
可執行代碼(自由格式)
|
IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE | IIMAGE_SCN_MEM_READ
|
.tls
|
線程局部存儲(僅適用於目標文件)
|
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE
|
.tls$
|
線程局部存儲(僅適用於目標文件)
|
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE
|
.vsdata
|
與GP相關的已初始化數據(自由格式,僅適用於ARM、SH4和Thumb平臺)
|
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE
|
.xdata
|
異常信息(自由格式)
|
IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ
|
偏移
|
大小
|
域
|
描述
|
0
|
4
|
Characteristics
|
保留,必須爲0。
|
4
|
4
|
TimeDateStamp
|
調試數據被建立的日期和時間。
|
8
|
2
|
MajorVersion
|
調試數據格式的主版本號。
|
10
|
2
|
MinorVersion
|
調試數據格式的次版本號。
|
12
|
4
|
Type
|
調試信息的格式。這個域的存在使得能夠支持多個調試器。要獲取更多信息,請參考6.1.2節「調試類型」。
|
16
|
4
|
SizeOfData
|
調試數據(不包括調試目錄自己)的大小。
|
20
|
4
|
AddressOfRawData
|
當被加載時調試數據相對於映像基址的偏移地址。
|
24
|
4
|
PointerToRawData
|
指向調試數據的文件指針。
|
常量
|
值
|
描述
|
IMAGE_DEBUG_TYPE_UNKNOWN
|
0
|
未知值,全部工具均忽略此值。
|
IMAGE_DEBUG_TYPE_COFF
|
1
|
COFF
調試信息(行號信息、符號表和字符串表)。文件頭中也有相關域指向這種類型的調試信息。
|
IMAGE_DEBUG_TYPE_CODEVIEW
|
2
|
Visual C++
調試信息。
|
IMAGE_DEBUG_TYPE_FPO
|
3
|
幀指針省略(FPO)信息。這種信息告訴調試器如何解釋非標準棧幀,這種幀將EBP寄存器用於其它目的而不是做爲幀指針。
|
IMAGE_DEBUG_TYPE_MISC
|
4
|
DBG
文件的位置。
|
IMAGE_DEBUG_TYPE_EXCEPTION
|
5
|
.pdata
節的副本。
|
IMAGE_DEBUG_TYPE_FIXUP
|
6
|
保留。
|
IMAGE_DEBUG_TYPE_OMAP_TO_SRC
|
7
|
從通過代碼重排後的映像中的RVA到原映像中的RVA的映射。
|
IMAGE_DEBUG_TYPE_OMAP_FROM_SRC
|
8
|
從原映像中的RVA到通過代碼重排後的映像中的RVA的映射。
|
IMAGE_DEBUG_TYPE_BORLAND
|
9
|
保留,供
Borland
公司使用。
|
IMAGE_DEBUG_TYPE_RESERVED10
|
10
|
保留。
|
IMAGE_DEBUG_TYPE_CLSID
|
11
|
保留。
|
表名
|
描述
|
導出目錄表
|
一個只有一行的表(與調試目錄不一樣)。它給出了其它各類導出表的位置和大小。
|
導出地址表
|
一個由導出符號的RVA組成的數組。它們是導出的函數和數據在可執行代碼節和數據節內的實際地址。其它映像文件能夠經過使用這個表的索引(序數)來導入符號,或者若是定義了一個與序數對應的公用名稱的話,也能夠用這個公用名稱來導入符號。
|
導出名稱指針表
|
一個由指向導出符號名稱的指針組成的數組,按升序排列。
|
導出序數表
|
一個由對應於導出名稱指針表中各個成員的序數組成的數組。它們的對應是經過位置來體現的,所以導出名稱指針表與導出序數表成員數目必須相同。每一個序數都是導出地址表的一個索引。
|
導出名稱表
|
一系列以NULL結尾的ASCII碼字符串。導出名稱指針表中的成員都指向這個區域。它們都是公用名稱,符號導入與導出就是經過它們。這些公用名稱並不須要與映像文件內部使用的私有名稱相同。
|
偏移
|
大小
|
域
|
描述
|
0
|
4
|
Export Flags
|
保留,必須爲0。
|
4
|
4
|
Time/Date Stamp
|
導出數據被建立的日期和時間。
|
8
|
2
|
Major Version
|
主版本號。用戶能夠自行設置主版本號和次版本號。
|
10
|
2
|
Minor Version
|
次版本號。
|
12
|
4
|
Name RVA
|
包含這個DLL名稱的ASCII碼字符串相對於映像基址的偏移地址。
|
16
|
4
|
Ordinal Base
|
映像中導出符號的起始序數值。這個域指定了導出地址表的起始序數值。它一般被設置爲1。
|
20
|
4
|
Address Table Entries
|
導出地址表中元素的數目。
|
24
|
4
|
Number of Name Pointers
|
導出名稱指針表中元素的數目。它同時也是導出序數表中元素的數目。
|
28
|
4
|
Export Address Table RVA
|
導出地址表相對於映像基址的偏移地址。
|
32
|
4
|
Name Pointer RVA
|
導出名稱指針表相對於映像基址的偏移地址。它的大小由Number of Name Pointers域給出。
|
36
|
4
|
Ordinal Table RVA
|
導出序數表相對於映像基址的偏移地址。
|
偏移
|
大小
|
域
|
描述
|
0
|
4
|
Export RVA
|
當加載進內存時,導出符號相對於映像基址的偏移地址。例如導出函數的地址。
|
0
|
4
|
Forwarder RVA
|
這是指向導出節中一個以NULL結尾的ASCII碼字符串的指針。這個字符串必須位於Export Table(導出表)數據目錄項給出的範圍以內。要獲取更多信息,請參考3.4.3節「可選文件頭中的數據目錄(僅適用於映像文件)」。這個字符串給出了導出符號所在DLL的名稱以及導出符號的名稱(例如「MYDLL.expfunc」),或者DLL的名稱以及導出符號的序數值(例如「MYDLL.#27」)。
|
目錄表
|
空目錄項
|
DLL1的導入查找表
|
空表項
|
DLL2的導入查找表
|
空表項
|
DLL3的導入查找表
|
空表項
|
提示/名稱表
|
偏移
|
大小
|
域
|
描述
|
0
|
4
|
Import Lookup Table RVA (Characteristics)
|
導入查找表的RVA。這個表包含了每個導入符號的名稱或序數。(這個域在Winnt.h文件中的名稱是「Characteristics」,但已經名存實亡了。)
|
4
|
4
|
Time/Date Stamp
|
這個域一直被設置爲0,直到映像被綁定。當映像被綁定以後,這個域被設置爲這個DLL的日期/時間戳。
|
8
|
4
|
Forwarder Chain
|
第一個轉發項的索引。
|
12
|
4
|
Name RVA
|
包含DLL名稱的ASCII碼字符串相對於映像基址的偏移地址。
|
16
|
4
|
Import Address Table RVA (Thunk Table)
|
導入地址表的RVA。這個表的內容與導入查找表的內容徹底同樣,直到映像被綁定。
|
位
|
大小
|
位域
|
描述
|
31/63
|
1
|
Ordinal/Name Flag
|
若是這個位爲1,說明是經過序數導入的。不然是經過名稱導入的。測試這個位的掩碼爲0x80000000(PE32)或0x8000000000000000(PE32+)。
|
15-0
|
16
|
Ordinal Number
|
序數值(16位長)。只有當Ordinal/Name Flag域爲1(即經過序數導入)時才使用這個域。位30-15(PE32)或62-15(PE32+)必須爲0。
|
30
-
0
|
31
|
Hint/Name Table RVA
|
提示/名稱表項的RVA(31位長)。只有當Ordinal/Name Flag域爲0(即經過名稱導入)時才使用這個域。對於PE32+來講,位62-31必須爲0。
|
偏移
|
大小
|
域
|
描述
|
0
|
2
|
Hint
|
導出名稱指針表的索引。當搜索匹配字符串時首選使用這個值。若是匹配失敗,再在DLL的導出名稱指針表中進行二進制搜索。
|
2
|
可變
|
Name
|
包含導入符號名稱的ASCII碼字符串。這個字符串必須與DLL導出的公用名稱匹配。同時這個字符串區分大小寫而且以NULL結尾。
|
*
|
0
或
1
|
Pad
|
爲了讓提示/名稱表的下一個元素出如今偶數地址,這裏可能須要填充0個或1個NULL字節。
|
偏移
|
大小
|
域
|
描述
|
0
|
4
|
Begin Address
|
相應函數的VA。
|
4
|
4
|
End Address
|
函數結尾的VA。
|
8
|
4
|
Exception Handler
|
指向要執行的異常處理程序的指針。
|
12
|
4
|
Handler Data
|
指向要傳遞給異常處理程序的附加數據的指針。
|
16
|
4
|
Prolog End Address
|
函數prolog代碼結尾的VA。
|
偏移
|
大小
|
域
|
描述
|
0
|
4
|
Begin Address
|
相應函數的VA。
|
4
|
8
位
|
Prolog Length
|
函數prolog代碼包含的指令數。
|
4
|
22
位
|
Function Length
|
函數代碼包含的指令數。
|
4
|
1
位
|
32-bit Flag
|
若是此位爲1,代表函數由32位指令組成。不然,函數由16位指令組成。
|
4
|
1
位
|
Exception Flag
|
若是此位爲1,代表存在用於此函數的異常處理程序;不然,不存在異常處理程序。
|
偏移
|
大小
|
域
|
描述
|
0
|
4
|
Begin Address
|
相應函數的RVA。
|
4
|
4
|
End Address
|
函數結尾的RVA。
|
8
|
4
|
Unwind
Information
|
用於異常處理的展開(
Unwind
)信息的RVA。
|
偏移
|