From patchwork Tue Aug 19 20:10:09 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Micay X-Patchwork-Id: 2440 Received: (qmail 24877 invoked by alias); 19 Aug 2014 20:10:54 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 24865 invoked by uid 89); 19 Aug 2014 20:10:53 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.6 required=5.0 tests=BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-ob0-f182.google.com Received: from mail-ob0-f182.google.com (HELO mail-ob0-f182.google.com) (209.85.214.182) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Tue, 19 Aug 2014 20:10:52 +0000 Received: by mail-ob0-f182.google.com with SMTP id wm4so5624625obc.27 for ; Tue, 19 Aug 2014 13:10:50 -0700 (PDT) X-Received: by 10.60.145.239 with SMTP id sx15mr11488936oeb.72.1408479050099; Tue, 19 Aug 2014 13:10:50 -0700 (PDT) Received: from localhost.localdomain (CPEbc1401380f73-CMbc1401380f70.cpe.net.cable.rogers.com. [99.231.166.199]) by mx.google.com with ESMTPSA id r10sm29994852oej.7.2014.08.19.13.10.48 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 19 Aug 2014 13:10:49 -0700 (PDT) From: Daniel Micay To: gdb-patches@sourceware.org Cc: Daniel Micay Subject: [PATCH] add support for high entropy ASLR on Windows Date: Tue, 19 Aug 2014 16:10:09 -0400 Message-Id: <1408479009-7955-1-git-send-email-danielmicay@gmail.com> Enabling the HIGH_ENTROPY_VA flag allows the operating system to use addresses outside of the 32-bit range before memory exhaustion. This results in a higher entropy implementation of ASLR when used with the DYNAMIC_BASE flag. 2014-08-19 Daniel Micay * include/coff/pe.h: Add HIGH_ENTROPY_VA flag * ld/emultempl/pep.em: Add --high-entropy-va switch * ld/ld.texinfo: Document the --high-entropy-va switch --- include/coff/pe.h | 1 + ld/emultempl/pep.em | 7 +++++++ ld/ld.texinfo | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/include/coff/pe.h b/include/coff/pe.h index 0ed9dde..5ffa7c0 100644 --- a/include/coff/pe.h +++ b/include/coff/pe.h @@ -40,6 +40,7 @@ /* DllCharacteristics flag bits. The inconsistent naming may seem odd, but that is how they are defined in the PE specification. */ +#define IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA 0x0020 #define IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE 0x0040 #define IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY 0x0080 #define IMAGE_DLL_CHARACTERISTICS_NX_COMPAT 0x0100 diff --git a/ld/emultempl/pep.em b/ld/emultempl/pep.em index 916a786..6d56bc3 100644 --- a/ld/emultempl/pep.em +++ b/ld/emultempl/pep.em @@ -237,6 +237,7 @@ enum options OPTION_LEADING_UNDERSCORE, OPTION_ENABLE_LONG_SECTION_NAMES, OPTION_DISABLE_LONG_SECTION_NAMES, + OPTION_HIGH_ENTROPY_VA, OPTION_DYNAMIC_BASE, OPTION_FORCE_INTEGRITY, OPTION_NX_COMPAT, @@ -314,6 +315,7 @@ gld${EMULATION_NAME}_add_options #endif {"enable-long-section-names", no_argument, NULL, OPTION_ENABLE_LONG_SECTION_NAMES}, {"disable-long-section-names", no_argument, NULL, OPTION_DISABLE_LONG_SECTION_NAMES}, + {"high-entropy-va", no_argument, NULL, OPTION_HIGH_ENTROPY_VA}, {"dynamicbase",no_argument, NULL, OPTION_DYNAMIC_BASE}, {"forceinteg", no_argument, NULL, OPTION_FORCE_INTEGRITY}, {"nxcompat", no_argument, NULL, OPTION_NX_COMPAT}, @@ -450,6 +452,8 @@ gld_${EMULATION_NAME}_list_options (FILE *file) executable image files\n")); fprintf (file, _(" --disable-long-section-names Never use long COFF section names, even\n\ in object files\n")); + fprintf (file, _(" --high-entropy-va Image is compatible with 64-bit address space\n\ + layout randomization (ASLR)\n")); fprintf (file, _(" --dynamicbase Image base address may be relocated using\n\ address space layout randomization (ASLR)\n")); fprintf (file, _(" --forceinteg Code integrity checks are enforced\n")); @@ -804,6 +808,9 @@ gld${EMULATION_NAME}_handle_option (int optc) pep_use_coff_long_section_names = 0; break; /* Get DLLCharacteristics bits */ + case OPTION_HIGH_ENTROPY_VA: + pe_dll_characteristics |= IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA; + break; case OPTION_DYNAMIC_BASE: pe_dll_characteristics |= IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE; break; diff --git a/ld/ld.texinfo b/ld/ld.texinfo index 718a7d0..350a48b 100644 --- a/ld/ld.texinfo +++ b/ld/ld.texinfo @@ -2655,6 +2655,10 @@ The following options set flags in the @code{DllCharacteristics} field of the PE file header: [These options are specific to PE targeted ports of the linker] +@kindex --high-entropy-va +@item --high-entropy-va +Image is compatible with 64-bit address space layout randomization (ASLR). + @kindex --dynamicbase @item --dynamicbase The image base address may be relocated using address space layout