From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x32f.google.com (mail-wm1-x32f.google.com [IPv6:2a00:1450:4864:20::32f]) by sourceware.org (Postfix) with ESMTPS id 1D2B7385840D for ; Mon, 17 Apr 2023 18:40:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1D2B7385840D 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-x32f.google.com with SMTP id 5b1f17b1804b1-3f09b4a156eso12032235e9.3 for ; Mon, 17 Apr 2023 11:40:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681756847; x=1684348847; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=7UoyDS33lXBq0O7NMOJROzNIoWBVVnbsO/5aMybmXco=; b=k6A9tKQ4FxGIgAvL/ggzQc01xv18G7D3OduN71nvvIuErt3LyKwLAZhFyBdVp+mhwF Nc4HHhKLaKgeJkKRrDyxPLQFAz+9412l7bsmpR0rdcmrltyzvrSQQAO/WmoywmcHvJ7e Tf6qDoSRq54HRb2MLP/9rAyKLBInSVTs1AtopA5zR92lnXoYxvKIrOpdWvZNxN1Qv/PA O6fFF4WBhv9Fz7Pb1JeuPEmYruTQKEqg0KUXgivJxicLHxa0EvpJFx9QycOpb3o5mdpd hm+3rGZtuGSfhzpf5a/LwJM5jfTvKQRkGxxWhwC9MewMSvT8D1J3l3pTz7/k1O6DNrWW jiDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681756847; x=1684348847; 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=7UoyDS33lXBq0O7NMOJROzNIoWBVVnbsO/5aMybmXco=; b=UNqfDzRhjQOVRy+6FiLzvqMBO/i/Hnk+Ikq5floEuLZU+4hpbx2N8MvM6Fn3VVHJrv v4mVKsR8ZtguYQymN64bid2Cr4a8wF/smghQU1wuHZQbL+nKoPYIUSlzwwjQQ0/OgYW4 qc8pWIDqaCwha7z8rXOZKhGEVzfQPWmkisKnrx5sa04REkoxCdiy0g8rxdsAYL9wDYWd MxPyJGQkZdoeAXhgd9LpvcrHJu6GJyMrFFdbCV+JuXLPA1dwUe/kMDtTmCPrG3Hrp7N1 p+KP04qzCapxF+mBBa8ZKF2gtSHBwiUae/UgMHJs2wCeETVgqmMoxwddJr4zKQlHVCbD 9OrQ== X-Gm-Message-State: AAQBX9eE9gc+qgiN40iAbXq4RZ36698s0jdfJmy4U1qvob9pqDvsiafN pab1UH33MHIVJl7KQNnH3v6EfqxqcD0= X-Google-Smtp-Source: AKy350bMZH1XyJrU4y2z8vtlBoKu/6kFXVrWKwQRixfBZwx5jE54Z97P4I0LYdjkPmjpBlRYdQloWA== X-Received: by 2002:adf:f0d1:0:b0:2cf:f44e:45e1 with SMTP id x17-20020adff0d1000000b002cff44e45e1mr5532471wro.19.1681756847470; Mon, 17 Apr 2023 11:40:47 -0700 (PDT) Received: from localhost.localdomain (092248052234.atmpu0038.highway.a1.net. [92.248.52.234]) by smtp.gmail.com with ESMTPSA id k18-20020a5d6e92000000b002cea8e3bd54sm11044633wrz.53.2023.04.17.11.40.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Apr 2023 11:40:47 -0700 (PDT) From: Christoph Reiter To: cygwin-apps@cygwin.com Cc: Christoph Reiter Subject: [PATCH v2] peflags: add support for IMAGE_DLLCHARACTERISTICS_GUARD_CF Date: Mon, 17 Apr 2023 20:40:34 +0200 Message-Id: <20230417184034.2234-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.5 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. The flag for MSVC is called "/guard:cf" and the macro ends with "GUARD_CF". To keep things consistent, it would make sense to name the option "guard-cf". However, there's already "-c"/"control-flow-guard" in genpeimg for this flag, and genpeimg shares all other options with peflags so far. So, follow genpeimg and go with "-c" and "--control-flow-guard". This is motivated by mingw-w64 and llvm v16 gaining support for CFG (Control Flow Guard). --- Renamed the option from -g/--guard-cf to -c/--control-flow-guard peflags.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/peflags.c b/peflags.c index b1cd7a8..93eaa0b 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, control-flow-guard), 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'}, + {"control-flow-guard", optional_argument, NULL, 'c'}, {"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::c::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 'c': + 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,8 @@ help (FILE *f) " -e,\n" " --high-entropy-va [BOOL] Image is compatible with 64-bit address space\n" " layout randomization (ASLR).\n" +" -c,\n" +" --control-flow-guard [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