mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
ld: mark PE executables as terminal services aware
This has been the default in MSVC for a very long time, and it's hard to imagine modern programs actually wanting the old legacy behavior. For example, no modern programs try to install their junk into C:\windows and therefore need to have an emulated writable windows directory. That's not really even allowed by ACLs on modern systems. Change-Id: Iadaca6815e39ea5c6b05c1cac5a95cfc35e5b48a Reviewed-on: https://go-review.googlesource.com/c/go/+/191840 Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
This commit is contained in:
parent
2afe9d4dec
commit
8fc35238a7
2 changed files with 47 additions and 39 deletions
|
|
@ -1172,6 +1172,9 @@ func (ctxt *Link) hostlink() {
|
||||||
} else {
|
} else {
|
||||||
argv = append(argv, "-mconsole")
|
argv = append(argv, "-mconsole")
|
||||||
}
|
}
|
||||||
|
// Mark as having awareness of terminal services, to avoid
|
||||||
|
// ancient compatibility hacks.
|
||||||
|
argv = append(argv, "-Wl,--tsaware")
|
||||||
case objabi.Haix:
|
case objabi.Haix:
|
||||||
argv = append(argv, "-pthread")
|
argv = append(argv, "-pthread")
|
||||||
// prevent ld to reorder .text functions to keep the same
|
// prevent ld to reorder .text functions to keep the same
|
||||||
|
|
|
||||||
|
|
@ -57,45 +57,46 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
IMAGE_FILE_MACHINE_I386 = 0x14c
|
IMAGE_FILE_MACHINE_I386 = 0x14c
|
||||||
IMAGE_FILE_MACHINE_AMD64 = 0x8664
|
IMAGE_FILE_MACHINE_AMD64 = 0x8664
|
||||||
IMAGE_FILE_MACHINE_ARM = 0x1c0
|
IMAGE_FILE_MACHINE_ARM = 0x1c0
|
||||||
IMAGE_FILE_MACHINE_ARMNT = 0x1c4
|
IMAGE_FILE_MACHINE_ARMNT = 0x1c4
|
||||||
IMAGE_FILE_RELOCS_STRIPPED = 0x0001
|
IMAGE_FILE_RELOCS_STRIPPED = 0x0001
|
||||||
IMAGE_FILE_EXECUTABLE_IMAGE = 0x0002
|
IMAGE_FILE_EXECUTABLE_IMAGE = 0x0002
|
||||||
IMAGE_FILE_LINE_NUMS_STRIPPED = 0x0004
|
IMAGE_FILE_LINE_NUMS_STRIPPED = 0x0004
|
||||||
IMAGE_FILE_LARGE_ADDRESS_AWARE = 0x0020
|
IMAGE_FILE_LARGE_ADDRESS_AWARE = 0x0020
|
||||||
IMAGE_FILE_32BIT_MACHINE = 0x0100
|
IMAGE_FILE_32BIT_MACHINE = 0x0100
|
||||||
IMAGE_FILE_DEBUG_STRIPPED = 0x0200
|
IMAGE_FILE_DEBUG_STRIPPED = 0x0200
|
||||||
IMAGE_SCN_CNT_CODE = 0x00000020
|
IMAGE_SCN_CNT_CODE = 0x00000020
|
||||||
IMAGE_SCN_CNT_INITIALIZED_DATA = 0x00000040
|
IMAGE_SCN_CNT_INITIALIZED_DATA = 0x00000040
|
||||||
IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x00000080
|
IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x00000080
|
||||||
IMAGE_SCN_MEM_EXECUTE = 0x20000000
|
IMAGE_SCN_MEM_EXECUTE = 0x20000000
|
||||||
IMAGE_SCN_MEM_READ = 0x40000000
|
IMAGE_SCN_MEM_READ = 0x40000000
|
||||||
IMAGE_SCN_MEM_WRITE = 0x80000000
|
IMAGE_SCN_MEM_WRITE = 0x80000000
|
||||||
IMAGE_SCN_MEM_DISCARDABLE = 0x2000000
|
IMAGE_SCN_MEM_DISCARDABLE = 0x2000000
|
||||||
IMAGE_SCN_LNK_NRELOC_OVFL = 0x1000000
|
IMAGE_SCN_LNK_NRELOC_OVFL = 0x1000000
|
||||||
IMAGE_SCN_ALIGN_32BYTES = 0x600000
|
IMAGE_SCN_ALIGN_32BYTES = 0x600000
|
||||||
IMAGE_DIRECTORY_ENTRY_EXPORT = 0
|
IMAGE_DIRECTORY_ENTRY_EXPORT = 0
|
||||||
IMAGE_DIRECTORY_ENTRY_IMPORT = 1
|
IMAGE_DIRECTORY_ENTRY_IMPORT = 1
|
||||||
IMAGE_DIRECTORY_ENTRY_RESOURCE = 2
|
IMAGE_DIRECTORY_ENTRY_RESOURCE = 2
|
||||||
IMAGE_DIRECTORY_ENTRY_EXCEPTION = 3
|
IMAGE_DIRECTORY_ENTRY_EXCEPTION = 3
|
||||||
IMAGE_DIRECTORY_ENTRY_SECURITY = 4
|
IMAGE_DIRECTORY_ENTRY_SECURITY = 4
|
||||||
IMAGE_DIRECTORY_ENTRY_BASERELOC = 5
|
IMAGE_DIRECTORY_ENTRY_BASERELOC = 5
|
||||||
IMAGE_DIRECTORY_ENTRY_DEBUG = 6
|
IMAGE_DIRECTORY_ENTRY_DEBUG = 6
|
||||||
IMAGE_DIRECTORY_ENTRY_COPYRIGHT = 7
|
IMAGE_DIRECTORY_ENTRY_COPYRIGHT = 7
|
||||||
IMAGE_DIRECTORY_ENTRY_ARCHITECTURE = 7
|
IMAGE_DIRECTORY_ENTRY_ARCHITECTURE = 7
|
||||||
IMAGE_DIRECTORY_ENTRY_GLOBALPTR = 8
|
IMAGE_DIRECTORY_ENTRY_GLOBALPTR = 8
|
||||||
IMAGE_DIRECTORY_ENTRY_TLS = 9
|
IMAGE_DIRECTORY_ENTRY_TLS = 9
|
||||||
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG = 10
|
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG = 10
|
||||||
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT = 11
|
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT = 11
|
||||||
IMAGE_DIRECTORY_ENTRY_IAT = 12
|
IMAGE_DIRECTORY_ENTRY_IAT = 12
|
||||||
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT = 13
|
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT = 13
|
||||||
IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14
|
IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14
|
||||||
IMAGE_SUBSYSTEM_WINDOWS_GUI = 2
|
IMAGE_SUBSYSTEM_WINDOWS_GUI = 2
|
||||||
IMAGE_SUBSYSTEM_WINDOWS_CUI = 3
|
IMAGE_SUBSYSTEM_WINDOWS_CUI = 3
|
||||||
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = 0x0040
|
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = 0x0040
|
||||||
IMAGE_DLLCHARACTERISTICS_NX_COMPAT = 0x0100
|
IMAGE_DLLCHARACTERISTICS_NX_COMPAT = 0x0100
|
||||||
|
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = 0x8000
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO(crawshaw): add these constants to debug/pe.
|
// TODO(crawshaw): add these constants to debug/pe.
|
||||||
|
|
@ -859,6 +860,10 @@ func (f *peFile) writeOptionalHeader(ctxt *Link) {
|
||||||
oh.DllCharacteristics = IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE | IMAGE_DLLCHARACTERISTICS_NX_COMPAT
|
oh.DllCharacteristics = IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE | IMAGE_DLLCHARACTERISTICS_NX_COMPAT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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
|
||||||
|
|
||||||
// Disable stack growth as we don't want Windows to
|
// Disable stack growth as we don't want Windows to
|
||||||
// fiddle with the thread stack limits, which we set
|
// fiddle with the thread stack limits, which we set
|
||||||
// ourselves to circumvent the stack checks in the
|
// ourselves to circumvent the stack checks in the
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue