320 lines
10 KiB
YAML
320 lines
10 KiB
YAML
## Test all members of 64-bit load config.
|
|
# RUN: yaml2obj --docnum=1 %s -o %t
|
|
# RUN: llvm-readobj --coff-load-config %t | FileCheck %s --check-prefix=ALL
|
|
|
|
# ALL: Format: COFF-x86-64
|
|
# ALL-NEXT: Arch: x86_64
|
|
# ALL-NEXT: AddressSize: 64bit
|
|
# ALL-NEXT: LoadConfig [
|
|
# ALL-NEXT: Size: 0x150
|
|
# ALL-NEXT: TimeDateStamp: 1970-01-01 00:00:01 (0x1)
|
|
# ALL-NEXT: MajorVersion: 0x2
|
|
# ALL-NEXT: MinorVersion: 0x3
|
|
# ALL-NEXT: GlobalFlagsClear: 0x4
|
|
# ALL-NEXT: GlobalFlagsSet: 0x5
|
|
# ALL-NEXT: CriticalSectionDefaultTimeout: 0x6
|
|
# ALL-NEXT: DeCommitFreeBlockThreshold: 0x7
|
|
# ALL-NEXT: DeCommitTotalFreeThreshold: 0x8
|
|
# ALL-NEXT: LockPrefixTable: 0x9
|
|
# ALL-NEXT: MaximumAllocationSize: 0x100000
|
|
# ALL-NEXT: VirtualMemoryThreshold: 0x2000000
|
|
# ALL-NEXT: ProcessHeapFlags: 0x2
|
|
# ALL-NEXT: ProcessAffinityMask: 0x1
|
|
# ALL-NEXT: CSDVersion: 0x3
|
|
# ALL-NEXT: DependentLoadFlags: 0x4
|
|
# ALL-NEXT: EditList: 0x5
|
|
# ALL-NEXT: SecurityCookie: 0x6
|
|
# ALL-NEXT: SEHandlerTable: 0x0
|
|
# ALL-NEXT: SEHandlerCount: 0
|
|
# ALL-NEXT: GuardCFCheckFunction: 0x9
|
|
# ALL-NEXT: GuardCFCheckDispatch: 0x1
|
|
# ALL-NEXT: GuardCFFunctionTable: 0x0
|
|
# ALL-NEXT: GuardCFFunctionCount: 0
|
|
# ALL-NEXT: GuardFlags [ (0x4)
|
|
# ALL-NEXT: ]
|
|
# ALL-NEXT: GuardAddressTakenIatEntryTable: 0x0
|
|
# ALL-NEXT: GuardAddressTakenIatEntryCount: 0
|
|
# ALL-NEXT: GuardLongJumpTargetTable: 0x0
|
|
# ALL-NEXT: GuardLongJumpTargetCount: 0
|
|
# ALL-NEXT: DynamicValueRelocTable: 0x2
|
|
# ALL-NEXT: CHPEMetadataPointer: 0x0
|
|
# ALL-NEXT: GuardRFFailureRoutine: 0x4
|
|
# ALL-NEXT: GuardRFFailureRoutineFunctionPointer: 0x5
|
|
# ALL-NEXT: DynamicValueRelocTableOffset: 0x6
|
|
# ALL-NEXT: DynamicValueRelocTableSection: 7
|
|
# ALL-NEXT: GuardRFVerifyStackPointerFunctionPointer: 0x8
|
|
# ALL-NEXT: HotPatchTableOffset: 0x9
|
|
# ALL-NEXT: EnclaveConfigurationPointer: 0x1
|
|
# ALL-NEXT: VolatileMetadataPointer: 0x2
|
|
# ALL-NEXT: GuardEHContinuationTable: 0x0
|
|
# ALL-NEXT: GuardEHContinuationCount: 0
|
|
# ALL-NEXT: ]
|
|
|
|
--- !COFF
|
|
OptionalHeader:
|
|
ImageBase: 0x180000000
|
|
SectionAlignment: 4096
|
|
FileAlignment: 512
|
|
DLLCharacteristics: [ ]
|
|
LoadConfigTable:
|
|
RelativeVirtualAddress: 0x1000
|
|
Size: 320
|
|
header:
|
|
Machine: IMAGE_FILE_MACHINE_AMD64
|
|
Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE, IMAGE_FILE_DLL ]
|
|
sections:
|
|
- Name: .rdata
|
|
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
|
|
VirtualAddress: 0x1000
|
|
VirtualSize: 320
|
|
StructuredData:
|
|
- LoadConfig:
|
|
Size: 0x150
|
|
TimeDateStamp: 1
|
|
MajorVersion: 2
|
|
MinorVersion: 3
|
|
GlobalFlagsClear: 4
|
|
GlobalFlagsSet: 5
|
|
CriticalSectionDefaultTimeout: 6
|
|
DeCommitFreeBlockThreshold: 7
|
|
DeCommitTotalFreeThreshold: 8
|
|
LockPrefixTable: 9
|
|
MaximumAllocationSize: 0x100000
|
|
VirtualMemoryThreshold: 0x2000000
|
|
ProcessAffinityMask: 1
|
|
ProcessHeapFlags: 2
|
|
CSDVersion: 3
|
|
DependentLoadFlags: 4
|
|
EditList: 5
|
|
SecurityCookie: 6
|
|
SEHandlerTable: 0
|
|
SEHandlerCount: 0
|
|
GuardCFCheckFunction: 9
|
|
GuardCFCheckDispatch: 1
|
|
GuardCFFunctionTable: 0
|
|
GuardCFFunctionCount: 0
|
|
GuardFlags: 4
|
|
CodeIntegrity:
|
|
Flags: 0x100
|
|
Catalog: 5
|
|
CatalogOffset: 6
|
|
GuardAddressTakenIatEntryTable: 0
|
|
GuardAddressTakenIatEntryCount: 0
|
|
GuardLongJumpTargetTable: 0
|
|
GuardLongJumpTargetCount: 0
|
|
DynamicValueRelocTable: 2
|
|
CHPEMetadataPointer: 0
|
|
GuardRFFailureRoutine: 4
|
|
GuardRFFailureRoutineFunctionPointer: 5
|
|
DynamicValueRelocTableOffset: 6
|
|
DynamicValueRelocTableSection: 7
|
|
GuardRFVerifyStackPointerFunctionPointer: 8
|
|
HotPatchTableOffset: 9
|
|
EnclaveConfigurationPointer: 1
|
|
VolatileMetadataPointer: 2
|
|
GuardEHContinuationTable: 0
|
|
GuardEHContinuationCount: 0
|
|
GuardXFGCheckFunctionPointer: 5
|
|
GuardXFGDispatchFunctionPointer: 6
|
|
GuardXFGTableDispatchFunctionPointer: 7
|
|
CastGuardOsDeterminedFailureMode: 8
|
|
symbols: []
|
|
...
|
|
|
|
## Simple 32-bit load config.
|
|
# RUN: yaml2obj --docnum=2 %s -o %t
|
|
# RUN: llvm-readobj --coff-load-config %t | FileCheck %s --check-prefix=LOADCFG32
|
|
|
|
# LOADCFG32: LoadConfig [
|
|
# LOADCFG32: MaximumAllocationSize: 0x100000
|
|
# LOADCFG32: VirtualMemoryThreshold: 0x2000000
|
|
# LOADCFG32: CHPEMetadataPointer: 0
|
|
|
|
--- !COFF
|
|
OptionalHeader:
|
|
ImageBase: 0x180000000
|
|
SectionAlignment: 4096
|
|
FileAlignment: 512
|
|
DLLCharacteristics: [ ]
|
|
LoadConfigTable:
|
|
RelativeVirtualAddress: 0x1000
|
|
Size: 320
|
|
header:
|
|
Machine: IMAGE_FILE_MACHINE_I386
|
|
Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE, IMAGE_FILE_DLL ]
|
|
sections:
|
|
- Name: .rdata
|
|
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
|
|
VirtualAddress: 0x1000
|
|
VirtualSize: 320
|
|
StructuredData:
|
|
- LoadConfig:
|
|
MaximumAllocationSize: 0x100000
|
|
VirtualMemoryThreshold: 0x2000000
|
|
symbols: []
|
|
...
|
|
|
|
## Create load config with all fields using default values.
|
|
# RUN: yaml2obj --docnum=3 %s -o %t
|
|
# RUN: llvm-readobj --coff-load-config %t | FileCheck %s --check-prefix=DEF
|
|
|
|
# DEF: Format: COFF-x86-64
|
|
# DEF: Arch: x86_64
|
|
# DEF: AddressSize: 64bit
|
|
# DEF: LoadConfig [
|
|
# DEF: Size: 0x138
|
|
# DEF: MajorVersion: 0x0
|
|
# DEF: MinorVersion: 0x0
|
|
# DEF: GuardEHContinuationCount: 0
|
|
# DEF: ]
|
|
|
|
--- !COFF
|
|
OptionalHeader:
|
|
ImageBase: 0x180000000
|
|
SectionAlignment: 4096
|
|
FileAlignment: 512
|
|
DLLCharacteristics: [ ]
|
|
LoadConfigTable:
|
|
RelativeVirtualAddress: 0x1000
|
|
Size: 320
|
|
header:
|
|
Machine: IMAGE_FILE_MACHINE_AMD64
|
|
Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE, IMAGE_FILE_DLL ]
|
|
sections:
|
|
- Name: .rdata
|
|
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
|
|
VirtualAddress: 0x1000
|
|
VirtualSize: 320
|
|
StructuredData:
|
|
- LoadConfig:
|
|
symbols: []
|
|
...
|
|
|
|
## Create laod config larger than coff_load_configuration32 struct.
|
|
# RUN: yaml2obj --docnum=4 %s -o %t
|
|
# RUN: llvm-readobj --hex-dump=.rdata %t | FileCheck %s --check-prefix=LARGE
|
|
|
|
# LARGE: 0x00401000 d0000000 00000000 00000000 00000000 ................
|
|
# LARGE-NEXT: 0x00401010 00000000 00000000 00000000 00000000 ................
|
|
# LARGE-NEXT: 0x00401020 00000000 00000000 00000000 00000000 ................
|
|
# LARGE-NEXT: 0x00401030 00000000 00000000 00000000 00000000 ................
|
|
# LARGE-NEXT: 0x00401040 00000000 00000000 00000000 00000000 ................
|
|
# LARGE-NEXT: 0x00401050 00000000 00000000 00000000 00000000 ................
|
|
# LARGE-NEXT: 0x00401060 00000000 00000000 00000000 00000000 ................
|
|
# LARGE-NEXT: 0x00401070 00000000 00000000 00000000 00000000 ................
|
|
# LARGE-NEXT: 0x00401080 00000000 00000000 00000000 00000000 ................
|
|
# LARGE-NEXT: 0x00401090 00000000 00000000 00000000 00000000 ................
|
|
# LARGE-NEXT: 0x004010a0 00000000 00000000 00000000 00000000 ................
|
|
# LARGE-NEXT: 0x004010b0 00000000 00000000 ff000000 00000000 ................
|
|
# LARGE-NEXT: 0x004010c0 00000000 00000000 00000000 00000000 ................
|
|
# LARGE-NEXT: 0x004010d0 aabbccdd ....
|
|
|
|
--- !COFF
|
|
OptionalHeader:
|
|
ImageBase: 0x400000
|
|
SectionAlignment: 4096
|
|
FileAlignment: 512
|
|
DLLCharacteristics: [ ]
|
|
LoadConfigTable:
|
|
RelativeVirtualAddress: 0x1000
|
|
Size: 320
|
|
header:
|
|
Machine: IMAGE_FILE_MACHINE_I386
|
|
Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE, IMAGE_FILE_DLL ]
|
|
sections:
|
|
- Name: .rdata
|
|
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
|
|
VirtualAddress: 0x1000
|
|
VirtualSize: 0xd4
|
|
StructuredData:
|
|
- LoadConfig:
|
|
Size: 0xd0
|
|
CastGuardOsDeterminedFailureMode: 0xff
|
|
- UInt32: 0xddccbbaa
|
|
symbols: []
|
|
...
|
|
|
|
## Try to specify load config field that barely fits the specified size.
|
|
# RUN: yaml2obj --docnum=5 %s -o %t
|
|
# RUN: llvm-readobj --hex-dump=.rdata %t | FileCheck %s --check-prefix=SMALL
|
|
# SMALL: 0x180001000 09000000 00000000 aaffffff ff
|
|
|
|
--- !COFF
|
|
OptionalHeader:
|
|
ImageBase: 0x180000000
|
|
SectionAlignment: 4096
|
|
FileAlignment: 512
|
|
DLLCharacteristics: [ ]
|
|
LoadConfigTable:
|
|
RelativeVirtualAddress: 0x1000
|
|
Size: 320
|
|
header:
|
|
Machine: IMAGE_FILE_MACHINE_AMD64
|
|
Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE, IMAGE_FILE_DLL ]
|
|
sections:
|
|
- Name: .rdata
|
|
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
|
|
VirtualAddress: 0x1000
|
|
VirtualSize: 13
|
|
StructuredData:
|
|
- LoadConfig:
|
|
Size: 9
|
|
MajorVersion: 0xbbaa
|
|
- UInt32: 0xffffffff
|
|
symbols: []
|
|
...
|
|
|
|
## Try to specify load config field that does not fit specified size.
|
|
# RUN: not yaml2obj --docnum=6 %s -o %t 2>&1 | FileCheck %s --check-prefix=TOOSMALL
|
|
# TOOSMALL: error: unknown key 'MajorVersion'
|
|
|
|
--- !COFF
|
|
OptionalHeader:
|
|
ImageBase: 0x180000000
|
|
SectionAlignment: 4096
|
|
FileAlignment: 512
|
|
DLLCharacteristics: [ ]
|
|
LoadConfigTable:
|
|
RelativeVirtualAddress: 0x1000
|
|
Size: 320
|
|
header:
|
|
Machine: IMAGE_FILE_MACHINE_AMD64
|
|
Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE, IMAGE_FILE_DLL ]
|
|
sections:
|
|
- Name: .rdata
|
|
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
|
|
VirtualAddress: 0x1000
|
|
VirtualSize: 320
|
|
StructuredData:
|
|
- LoadConfig:
|
|
Size: 8
|
|
MajorVersion: 10
|
|
symbols: []
|
|
...
|
|
|
|
## Set load config size to 0.
|
|
# RUN: not yaml2obj --docnum=7 %s -o %t 2>&1 | FileCheck %s --check-prefix=ZERO
|
|
# ZERO: error: Size must be at least 4
|
|
|
|
--- !COFF
|
|
OptionalHeader:
|
|
ImageBase: 0x180000000
|
|
SectionAlignment: 4096
|
|
FileAlignment: 512
|
|
DLLCharacteristics: [ ]
|
|
LoadConfigTable:
|
|
RelativeVirtualAddress: 0x1000
|
|
Size: 320
|
|
header:
|
|
Machine: IMAGE_FILE_MACHINE_AMD64
|
|
Characteristics: [ IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE, IMAGE_FILE_DLL ]
|
|
sections:
|
|
- Name: .rdata
|
|
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
|
|
VirtualAddress: 0x1000
|
|
VirtualSize: 320
|
|
StructuredData:
|
|
- LoadConfig:
|
|
Size: 0
|
|
symbols: []
|
|
...
|