mirror of https://github.com/golang/go.git
debug/pe: copy some consts from cmd/link/internal/ld
This CL copies IMAGE_FILE_*, IMAGE_SUBSYSTEM_* and IMAGE_DLLCHARACTERISTICS_* consts from cmd/link/internal/ld package. The consts are also used in cmd/go and debug/pe tests. So avoid the duplication. The consts are defined in https://docs.microsoft.com/en-us/windows/win32/debug/pe-format and might be useful to other Go users. The CL also adds some related consts. RELNOTE=yes Change-Id: Iaa868deaffc7c61051f2273397f3e7e101880a5b Reviewed-on: https://go-review.googlesource.com/c/go/+/222637 Run-TryBot: Alex Brainman <alex.brainman@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
38ad3baf00
commit
da07c59f24
|
|
@ -2208,15 +2208,10 @@ func testBuildmodePIE(t *testing.T, useCgo bool) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
defer f.Close()
|
||||
const (
|
||||
IMAGE_FILE_RELOCS_STRIPPED = 0x0001
|
||||
IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA = 0x0020
|
||||
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = 0x0040
|
||||
)
|
||||
if f.Section(".reloc") == nil {
|
||||
t.Error(".reloc section is not present")
|
||||
}
|
||||
if (f.FileHeader.Characteristics & IMAGE_FILE_RELOCS_STRIPPED) != 0 {
|
||||
if (f.FileHeader.Characteristics & pe.IMAGE_FILE_RELOCS_STRIPPED) != 0 {
|
||||
t.Error("IMAGE_FILE_RELOCS_STRIPPED flag is set")
|
||||
}
|
||||
var dc uint16
|
||||
|
|
@ -2225,13 +2220,13 @@ func testBuildmodePIE(t *testing.T, useCgo bool) {
|
|||
dc = oh.DllCharacteristics
|
||||
case *pe.OptionalHeader64:
|
||||
dc = oh.DllCharacteristics
|
||||
if (dc & IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA) == 0 {
|
||||
if (dc & pe.IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA) == 0 {
|
||||
t.Error("IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA flag is not set")
|
||||
}
|
||||
default:
|
||||
t.Fatalf("unexpected optional header type of %T", f.OptionalHeader)
|
||||
}
|
||||
if (dc & IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE) == 0 {
|
||||
if (dc & pe.IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE) == 0 {
|
||||
t.Error("IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE flag is not set")
|
||||
}
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -57,47 +57,15 @@ var (
|
|||
)
|
||||
|
||||
const (
|
||||
IMAGE_FILE_MACHINE_I386 = 0x14c
|
||||
IMAGE_FILE_MACHINE_AMD64 = 0x8664
|
||||
IMAGE_FILE_MACHINE_ARM = 0x1c0
|
||||
IMAGE_FILE_MACHINE_ARMNT = 0x1c4
|
||||
IMAGE_FILE_RELOCS_STRIPPED = 0x0001
|
||||
IMAGE_FILE_EXECUTABLE_IMAGE = 0x0002
|
||||
IMAGE_FILE_LINE_NUMS_STRIPPED = 0x0004
|
||||
IMAGE_FILE_LARGE_ADDRESS_AWARE = 0x0020
|
||||
IMAGE_FILE_32BIT_MACHINE = 0x0100
|
||||
IMAGE_FILE_DEBUG_STRIPPED = 0x0200
|
||||
IMAGE_SCN_CNT_CODE = 0x00000020
|
||||
IMAGE_SCN_CNT_INITIALIZED_DATA = 0x00000040
|
||||
IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x00000080
|
||||
IMAGE_SCN_MEM_EXECUTE = 0x20000000
|
||||
IMAGE_SCN_MEM_READ = 0x40000000
|
||||
IMAGE_SCN_MEM_WRITE = 0x80000000
|
||||
IMAGE_SCN_MEM_DISCARDABLE = 0x2000000
|
||||
IMAGE_SCN_LNK_NRELOC_OVFL = 0x1000000
|
||||
IMAGE_SCN_ALIGN_32BYTES = 0x600000
|
||||
IMAGE_DIRECTORY_ENTRY_EXPORT = 0
|
||||
IMAGE_DIRECTORY_ENTRY_IMPORT = 1
|
||||
IMAGE_DIRECTORY_ENTRY_RESOURCE = 2
|
||||
IMAGE_DIRECTORY_ENTRY_EXCEPTION = 3
|
||||
IMAGE_DIRECTORY_ENTRY_SECURITY = 4
|
||||
IMAGE_DIRECTORY_ENTRY_BASERELOC = 5
|
||||
IMAGE_DIRECTORY_ENTRY_DEBUG = 6
|
||||
IMAGE_DIRECTORY_ENTRY_COPYRIGHT = 7
|
||||
IMAGE_DIRECTORY_ENTRY_ARCHITECTURE = 7
|
||||
IMAGE_DIRECTORY_ENTRY_GLOBALPTR = 8
|
||||
IMAGE_DIRECTORY_ENTRY_TLS = 9
|
||||
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG = 10
|
||||
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT = 11
|
||||
IMAGE_DIRECTORY_ENTRY_IAT = 12
|
||||
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT = 13
|
||||
IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14
|
||||
IMAGE_SUBSYSTEM_WINDOWS_GUI = 2
|
||||
IMAGE_SUBSYSTEM_WINDOWS_CUI = 3
|
||||
IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA = 0x0020
|
||||
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = 0x0040
|
||||
IMAGE_DLLCHARACTERISTICS_NX_COMPAT = 0x0100
|
||||
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = 0x8000
|
||||
IMAGE_SCN_CNT_CODE = 0x00000020
|
||||
IMAGE_SCN_CNT_INITIALIZED_DATA = 0x00000040
|
||||
IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x00000080
|
||||
IMAGE_SCN_MEM_EXECUTE = 0x20000000
|
||||
IMAGE_SCN_MEM_READ = 0x40000000
|
||||
IMAGE_SCN_MEM_WRITE = 0x80000000
|
||||
IMAGE_SCN_MEM_DISCARDABLE = 0x2000000
|
||||
IMAGE_SCN_LNK_NRELOC_OVFL = 0x1000000
|
||||
IMAGE_SCN_ALIGN_32BYTES = 0x600000
|
||||
)
|
||||
|
||||
// TODO(crawshaw): add these constants to debug/pe.
|
||||
|
|
@ -761,11 +729,11 @@ func (f *peFile) writeFileHeader(ctxt *Link) {
|
|||
default:
|
||||
Exitf("unknown PE architecture: %v", ctxt.Arch.Family)
|
||||
case sys.AMD64:
|
||||
fh.Machine = IMAGE_FILE_MACHINE_AMD64
|
||||
fh.Machine = pe.IMAGE_FILE_MACHINE_AMD64
|
||||
case sys.I386:
|
||||
fh.Machine = IMAGE_FILE_MACHINE_I386
|
||||
fh.Machine = pe.IMAGE_FILE_MACHINE_I386
|
||||
case sys.ARM:
|
||||
fh.Machine = IMAGE_FILE_MACHINE_ARMNT
|
||||
fh.Machine = pe.IMAGE_FILE_MACHINE_ARMNT
|
||||
}
|
||||
|
||||
fh.NumberOfSections = uint16(len(f.sections))
|
||||
|
|
@ -775,24 +743,24 @@ func (f *peFile) writeFileHeader(ctxt *Link) {
|
|||
fh.TimeDateStamp = 0
|
||||
|
||||
if ctxt.LinkMode == LinkExternal {
|
||||
fh.Characteristics = IMAGE_FILE_LINE_NUMS_STRIPPED
|
||||
fh.Characteristics = pe.IMAGE_FILE_LINE_NUMS_STRIPPED
|
||||
} else {
|
||||
fh.Characteristics = IMAGE_FILE_EXECUTABLE_IMAGE | IMAGE_FILE_DEBUG_STRIPPED
|
||||
fh.Characteristics = pe.IMAGE_FILE_EXECUTABLE_IMAGE | pe.IMAGE_FILE_DEBUG_STRIPPED
|
||||
switch ctxt.Arch.Family {
|
||||
case sys.AMD64, sys.I386:
|
||||
if ctxt.BuildMode != BuildModePIE {
|
||||
fh.Characteristics |= IMAGE_FILE_RELOCS_STRIPPED
|
||||
fh.Characteristics |= pe.IMAGE_FILE_RELOCS_STRIPPED
|
||||
}
|
||||
}
|
||||
}
|
||||
if pe64 != 0 {
|
||||
var oh64 pe.OptionalHeader64
|
||||
fh.SizeOfOptionalHeader = uint16(binary.Size(&oh64))
|
||||
fh.Characteristics |= IMAGE_FILE_LARGE_ADDRESS_AWARE
|
||||
fh.Characteristics |= pe.IMAGE_FILE_LARGE_ADDRESS_AWARE
|
||||
} else {
|
||||
var oh pe.OptionalHeader32
|
||||
fh.SizeOfOptionalHeader = uint16(binary.Size(&oh))
|
||||
fh.Characteristics |= IMAGE_FILE_32BIT_MACHINE
|
||||
fh.Characteristics |= pe.IMAGE_FILE_32BIT_MACHINE
|
||||
}
|
||||
|
||||
fh.PointerToSymbolTable = uint32(f.symtabOffset)
|
||||
|
|
@ -853,36 +821,36 @@ func (f *peFile) writeOptionalHeader(ctxt *Link) {
|
|||
oh64.SizeOfHeaders = uint32(PEFILEHEADR)
|
||||
oh.SizeOfHeaders = uint32(PEFILEHEADR)
|
||||
if windowsgui {
|
||||
oh64.Subsystem = IMAGE_SUBSYSTEM_WINDOWS_GUI
|
||||
oh.Subsystem = IMAGE_SUBSYSTEM_WINDOWS_GUI
|
||||
oh64.Subsystem = pe.IMAGE_SUBSYSTEM_WINDOWS_GUI
|
||||
oh.Subsystem = pe.IMAGE_SUBSYSTEM_WINDOWS_GUI
|
||||
} else {
|
||||
oh64.Subsystem = IMAGE_SUBSYSTEM_WINDOWS_CUI
|
||||
oh.Subsystem = IMAGE_SUBSYSTEM_WINDOWS_CUI
|
||||
oh64.Subsystem = pe.IMAGE_SUBSYSTEM_WINDOWS_CUI
|
||||
oh.Subsystem = pe.IMAGE_SUBSYSTEM_WINDOWS_CUI
|
||||
}
|
||||
|
||||
// Mark as having awareness of terminal services, to avoid ancient compatibility hacks.
|
||||
oh64.DllCharacteristics |= IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE
|
||||
oh.DllCharacteristics |= IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE
|
||||
oh64.DllCharacteristics |= pe.IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE
|
||||
oh.DllCharacteristics |= pe.IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE
|
||||
|
||||
// Enable DEP
|
||||
oh64.DllCharacteristics |= IMAGE_DLLCHARACTERISTICS_NX_COMPAT
|
||||
oh.DllCharacteristics |= IMAGE_DLLCHARACTERISTICS_NX_COMPAT
|
||||
oh64.DllCharacteristics |= pe.IMAGE_DLLCHARACTERISTICS_NX_COMPAT
|
||||
oh.DllCharacteristics |= pe.IMAGE_DLLCHARACTERISTICS_NX_COMPAT
|
||||
|
||||
// The DLL can be relocated at load time.
|
||||
switch ctxt.Arch.Family {
|
||||
case sys.AMD64, sys.I386:
|
||||
if ctxt.BuildMode == BuildModePIE {
|
||||
oh64.DllCharacteristics |= IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
|
||||
oh.DllCharacteristics |= IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
|
||||
oh64.DllCharacteristics |= pe.IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
|
||||
oh.DllCharacteristics |= pe.IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
|
||||
}
|
||||
case sys.ARM:
|
||||
oh64.DllCharacteristics |= IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
|
||||
oh.DllCharacteristics |= IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
|
||||
oh64.DllCharacteristics |= pe.IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
|
||||
oh.DllCharacteristics |= pe.IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
|
||||
}
|
||||
|
||||
// Image can handle a high entropy 64-bit virtual address space.
|
||||
if ctxt.BuildMode == BuildModePIE {
|
||||
oh64.DllCharacteristics |= IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA
|
||||
oh64.DllCharacteristics |= pe.IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA
|
||||
}
|
||||
|
||||
// Disable stack growth as we don't want Windows to
|
||||
|
|
@ -1222,10 +1190,10 @@ func addimports(ctxt *Link, datsect *peSection) {
|
|||
out.Write32(0)
|
||||
|
||||
// update data directory
|
||||
pefile.dataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress = isect.virtualAddress
|
||||
pefile.dataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].Size = isect.virtualSize
|
||||
pefile.dataDirectory[IMAGE_DIRECTORY_ENTRY_IAT].VirtualAddress = uint32(dynamic.Value - PEBASE)
|
||||
pefile.dataDirectory[IMAGE_DIRECTORY_ENTRY_IAT].Size = uint32(dynamic.Size)
|
||||
pefile.dataDirectory[pe.IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress = isect.virtualAddress
|
||||
pefile.dataDirectory[pe.IMAGE_DIRECTORY_ENTRY_IMPORT].Size = isect.virtualSize
|
||||
pefile.dataDirectory[pe.IMAGE_DIRECTORY_ENTRY_IAT].VirtualAddress = uint32(dynamic.Value - PEBASE)
|
||||
pefile.dataDirectory[pe.IMAGE_DIRECTORY_ENTRY_IAT].Size = uint32(dynamic.Size)
|
||||
|
||||
out.SeekSet(endoff)
|
||||
}
|
||||
|
|
@ -1270,8 +1238,8 @@ func addexports(ctxt *Link) {
|
|||
sect.characteristics = IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ
|
||||
sect.checkOffset(ctxt.Out.Offset())
|
||||
va := int(sect.virtualAddress)
|
||||
pefile.dataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress = uint32(va)
|
||||
pefile.dataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size = sect.virtualSize
|
||||
pefile.dataDirectory[pe.IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress = uint32(va)
|
||||
pefile.dataDirectory[pe.IMAGE_DIRECTORY_ENTRY_EXPORT].Size = sect.virtualSize
|
||||
|
||||
vaName := va + binary.Size(&e) + nexport*4
|
||||
vaAddr := va + binary.Size(&e)
|
||||
|
|
@ -1478,8 +1446,8 @@ func addPEBaseReloc(ctxt *Link) {
|
|||
rsect.checkOffset(startoff)
|
||||
rsect.pad(ctxt.Out, uint32(size))
|
||||
|
||||
pefile.dataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress = rsect.virtualAddress
|
||||
pefile.dataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size = rsect.virtualSize
|
||||
pefile.dataDirectory[pe.IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress = rsect.virtualAddress
|
||||
pefile.dataDirectory[pe.IMAGE_DIRECTORY_ENTRY_BASERELOC].Size = rsect.virtualSize
|
||||
}
|
||||
|
||||
func (ctxt *Link) dope() {
|
||||
|
|
@ -1522,9 +1490,9 @@ func addpersrc(ctxt *Link) {
|
|||
h.pad(ctxt.Out, uint32(rsrcsym.Size))
|
||||
|
||||
// update data directory
|
||||
pefile.dataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress = h.virtualAddress
|
||||
pefile.dataDirectory[pe.IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress = h.virtualAddress
|
||||
|
||||
pefile.dataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].Size = h.virtualSize
|
||||
pefile.dataDirectory[pe.IMAGE_DIRECTORY_ENTRY_RESOURCE].Size = h.virtualSize
|
||||
}
|
||||
|
||||
func Asmbpe(ctxt *Link) {
|
||||
|
|
|
|||
|
|
@ -621,16 +621,14 @@ func TestBuildingWindowsGUI(t *testing.T) {
|
|||
}
|
||||
defer f.Close()
|
||||
|
||||
const _IMAGE_SUBSYSTEM_WINDOWS_GUI = 2
|
||||
|
||||
switch oh := f.OptionalHeader.(type) {
|
||||
case *OptionalHeader32:
|
||||
if oh.Subsystem != _IMAGE_SUBSYSTEM_WINDOWS_GUI {
|
||||
t.Errorf("unexpected Subsystem value: have %d, but want %d", oh.Subsystem, _IMAGE_SUBSYSTEM_WINDOWS_GUI)
|
||||
if oh.Subsystem != IMAGE_SUBSYSTEM_WINDOWS_GUI {
|
||||
t.Errorf("unexpected Subsystem value: have %d, but want %d", oh.Subsystem, IMAGE_SUBSYSTEM_WINDOWS_GUI)
|
||||
}
|
||||
case *OptionalHeader64:
|
||||
if oh.Subsystem != _IMAGE_SUBSYSTEM_WINDOWS_GUI {
|
||||
t.Errorf("unexpected Subsystem value: have %d, but want %d", oh.Subsystem, _IMAGE_SUBSYSTEM_WINDOWS_GUI)
|
||||
if oh.Subsystem != IMAGE_SUBSYSTEM_WINDOWS_GUI {
|
||||
t.Errorf("unexpected Subsystem value: have %d, but want %d", oh.Subsystem, IMAGE_SUBSYSTEM_WINDOWS_GUI)
|
||||
}
|
||||
default:
|
||||
t.Fatalf("unexpected OptionalHeader type: have %T, but want *pe.OptionalHeader32 or *pe.OptionalHeader64", oh)
|
||||
|
|
|
|||
|
|
@ -129,3 +129,56 @@ const (
|
|||
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT = 13
|
||||
IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14
|
||||
)
|
||||
|
||||
// Values of IMAGE_FILE_HEADER.Characteristics. These can be combined together.
|
||||
const (
|
||||
IMAGE_FILE_RELOCS_STRIPPED = 0x0001
|
||||
IMAGE_FILE_EXECUTABLE_IMAGE = 0x0002
|
||||
IMAGE_FILE_LINE_NUMS_STRIPPED = 0x0004
|
||||
IMAGE_FILE_LOCAL_SYMS_STRIPPED = 0x0008
|
||||
IMAGE_FILE_AGGRESIVE_WS_TRIM = 0x0010
|
||||
IMAGE_FILE_LARGE_ADDRESS_AWARE = 0x0020
|
||||
IMAGE_FILE_BYTES_REVERSED_LO = 0x0080
|
||||
IMAGE_FILE_32BIT_MACHINE = 0x0100
|
||||
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
|
||||
IMAGE_FILE_UP_SYSTEM_ONLY = 0x4000
|
||||
IMAGE_FILE_BYTES_REVERSED_HI = 0x8000
|
||||
)
|
||||
|
||||
// OptionalHeader64.Subsystem and OptionalHeader32.Subsystem values.
|
||||
const (
|
||||
IMAGE_SUBSYSTEM_UNKNOWN = 0
|
||||
IMAGE_SUBSYSTEM_NATIVE = 1
|
||||
IMAGE_SUBSYSTEM_WINDOWS_GUI = 2
|
||||
IMAGE_SUBSYSTEM_WINDOWS_CUI = 3
|
||||
IMAGE_SUBSYSTEM_OS2_CUI = 5
|
||||
IMAGE_SUBSYSTEM_POSIX_CUI = 7
|
||||
IMAGE_SUBSYSTEM_NATIVE_WINDOWS = 8
|
||||
IMAGE_SUBSYSTEM_WINDOWS_CE_GUI = 9
|
||||
IMAGE_SUBSYSTEM_EFI_APPLICATION = 10
|
||||
IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER = 11
|
||||
IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER = 12
|
||||
IMAGE_SUBSYSTEM_EFI_ROM = 13
|
||||
IMAGE_SUBSYSTEM_XBOX = 14
|
||||
IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION = 16
|
||||
)
|
||||
|
||||
// OptionalHeader64.DllCharacteristics and OptionalHeader32.DllCharacteristics
|
||||
// values. These can be combined together.
|
||||
const (
|
||||
IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA = 0x0020
|
||||
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = 0x0040
|
||||
IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY = 0x0080
|
||||
IMAGE_DLLCHARACTERISTICS_NX_COMPAT = 0x0100
|
||||
IMAGE_DLLCHARACTERISTICS_NO_ISOLATION = 0x0200
|
||||
IMAGE_DLLCHARACTERISTICS_NO_SEH = 0x0400
|
||||
IMAGE_DLLCHARACTERISTICS_NO_BIND = 0x0800
|
||||
IMAGE_DLLCHARACTERISTICS_APPCONTAINER = 0x1000
|
||||
IMAGE_DLLCHARACTERISTICS_WDM_DRIVER = 0x2000
|
||||
IMAGE_DLLCHARACTERISTICS_GUARD_CF = 0x4000
|
||||
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = 0x8000
|
||||
)
|
||||
|
|
|
|||
Loading…
Reference in New Issue