diff --git a/src/NetMQ/Core/Utils/OpCode.cs b/src/NetMQ/Core/Utils/OpCode.cs index 7228fcfc..060064c6 100644 --- a/src/NetMQ/Core/Utils/OpCode.cs +++ b/src/NetMQ/Core/Utils/OpCode.cs @@ -11,6 +11,15 @@ internal static class Opcode public static bool Open() { + // Look for an environment variable: "NETQM_SUPPRESS_RDTSC" with any value. + // The application can set this environment variable when this code is running in a system where + // it is not desirable to read the processor's time stamp counter. + // While this is supported in modern CPUs, the technique used for allocating executable memory, copying OP Code + // for the read of the time stamp and invoking the OP Code can be detected as Malware by some anti-virus vendors. + // https://github.com/zeromq/netmq/issues/1071 + string val = Environment.GetEnvironmentVariable("NETQM_SUPPRESS_RDTSC"); + if (!string.IsNullOrEmpty(val)) + return false; #if NETSTANDARD1_1_OR_GREATER || NET471_OR_GREATER if (RuntimeInformation.ProcessArchitecture != Architecture.X86 && RuntimeInformation.ProcessArchitecture != Architecture.X64)