From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x336.google.com (mail-wm1-x336.google.com [IPv6:2a00:1450:4864:20::336]) by sourceware.org (Postfix) with ESMTPS id A46123858423 for ; Sun, 16 Apr 2023 13:11:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A46123858423 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-wm1-x336.google.com with SMTP id o29-20020a05600c511d00b003f1739de43cso61911wms.4 for ; Sun, 16 Apr 2023 06:11:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681650694; x=1684242694; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=tco908fVGGnkhuk46IbiVW8EZFDLAriDOpBWKjhZxVs=; b=EgeO69sqZ5vDQxB94XJXKH6utHA+Yztcxg4SzWpRrckcUGvl+T8vDIQCb6IaGKSm+G WhFtywFCccAjrqSAviC4YOTb6ZE1rDAodIpG7RDUJwnxpokeKILSYr7IBpmIDanFsCRl cwM8zz3VXIkCsPy00+av6emoLYXI3aiPB0QD3EdsYZQuk9G0AIdBav1ctz49vdlPy/uv Aym6EkGEEG26vovoF7ToIzX8K7cDHIrmzg73RQC5+ChynKBxL9idiuPOH2m9K06f2pjM E3UxmgLnRWR4hiVKbIKBT5B1QdDH6/P4CbAp4x8g9Wqf06no/YQv5MyrleGlX4LlAmRo 3i3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681650694; x=1684242694; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=tco908fVGGnkhuk46IbiVW8EZFDLAriDOpBWKjhZxVs=; b=N8Fuus6lQfG4cegKnTjADsmff5V/Ni6AKi43+UGyfMko8nN0eGc2bhojMvO/fc+G1e tZAFC8bI10PWoq+sj7h+C+aqh31I9jBDsF/E+ccBSjiIJ3lJgx8VmzySmTcOnw6hsyUs vWlwd8Pizki/KDzd5eGgZJdqj+WDvZmOB6HnEgzR/bewK/Lv6lGKsrLPi0tkAjK0BKKT WPfju182TBQK+DC9whmdJkwB4JtNoXqDBvE2bK1DRZAwzBDRMYM/L+0CAy6JpJCewga+ w60UNCQcWWmC8xG5E3Z+nFA6IJ/IUljFndREc1FwFzTiNyNRrwx+LBagKh1ZLzP6uHfj xOvQ== X-Gm-Message-State: AAQBX9cDeevIjGQJbNmw43dcAaqRuUmdaGw+X+mGNfQzGWumyDcMpQt+ ia/E4tp8FwWQ5OEdMTKTxa+zzJQrAkg= X-Google-Smtp-Source: AKy350brlzfg+mGlKQu2ffweCe5s9j2HrB5lpqv2EEnyDvh1C2h4KKhiUZfGHulNAo0ZBvbZcm3QMw== X-Received: by 2002:a1c:770c:0:b0:3ed:307f:1663 with SMTP id t12-20020a1c770c000000b003ed307f1663mr9254905wmi.15.1681650694200; Sun, 16 Apr 2023 06:11:34 -0700 (PDT) Received: from localhost.localdomain (092248052234.atmpu0038.highway.a1.net. [92.248.52.234]) by smtp.gmail.com with ESMTPSA id t1-20020a1c7701000000b003ede06f3178sm9179002wmi.31.2023.04.16.06.11.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 16 Apr 2023 06:11:33 -0700 (PDT) From: Christoph Reiter To: cygwin-apps@cygwin.com Cc: Christoph Reiter Subject: [PATCH] peflags: add support for IMAGE_DLLCHARACTERISTICS_GUARD_CF Date: Sun, 16 Apr 2023 15:11:03 +0200 Message-Id: <20230416131103.6480-1-reiter.christoph@gmail.com> X-Mailer: git-send-email 2.40.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-9.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This allows for setting, clearing, and displaying the value of the "control flow guard" dll characteristics flag. For the option naming something like cfguard would probably be easier to understand, but the MSVC flag is "/guard:cf" and the macro contains GUARD_CF, so use "guard-cf" for consistency. This is motivated by mingw-w64 and llvm v16 gaining support for CFG (Control Flow Guard). --- peflags.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/peflags.c b/peflags.c index b1cd7a8..83ce48e 100644 --- a/peflags.c +++ b/peflags.c @@ -121,7 +121,7 @@ static const symbolic_flags_t pe_symbolic_flags[] = { CF(0x0800, no-bind), /*CF(0x1000, reserved_0x1000),*/ CF(0x2000, wdmdriver), -/*CF(0x4000, reserved_0x4000),*/ + CF(0x4000, guard-cf), CF(0x8000, tsaware), {0, 0, 0} }; @@ -182,6 +182,7 @@ sizeof_values_t sizeof_vals[5] = { static struct option long_options[] = { {"dynamicbase", optional_argument, NULL, 'd'}, {"high-entropy-va", optional_argument, NULL, 'e'}, + {"guard-cf", optional_argument, NULL, 'g'}, {"forceinteg", optional_argument, NULL, 'f'}, {"nxcompat", optional_argument, NULL, 'n'}, {"no-isolation", optional_argument, NULL, 'i'}, @@ -204,7 +205,7 @@ static struct option long_options[] = { {NULL, no_argument, NULL, 0} }; static const char *short_options - = "d::e::f::n::i::s::b::W::t::w::l::S::x::X::y::Y::z::T:vhV"; + = "d::e::g::f::n::i::s::b::W::t::w::l::S::x::X::y::Y::z::T:vhV"; static void short_usage (FILE *f); static void help (FILE *f); @@ -706,6 +707,11 @@ parse_args (int argc, char *argv[]) optarg, IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA); break; + case 'g': + handle_pe_flag_option (long_options[option_index].name, + optarg, + IMAGE_DLLCHARACTERISTICS_GUARD_CF); + break; case 'n': handle_pe_flag_option (long_options[option_index].name, optarg, @@ -1079,6 +1085,7 @@ help (FILE *f) " -e,\n" " --high-entropy-va [BOOL] Image is compatible with 64-bit address space\n" " layout randomization (ASLR).\n" +" -g, --guard-cf [BOOL] Image supports Control Flow Guard.\n" " -f, --forceinteg [BOOL] Code integrity checks are enforced.\n" " -n, --nxcompat [BOOL] Image is compatible with data execution\n" " prevention (DEP).\n" -- 2.40.0