Exe
net10.0
t.FullName == "Interop");
var sys = interop?.NestedTypes.FirstOrDefault(t => t.Name == "Sys");
var method = sys?.Methods.FirstOrDefault(m =>
m.Name == "GetCryptographicallySecureRandomBytes" &&
m.ReturnType.MetadataType == MetadataType.Int32 &&
m.Parameters.Count == 2);
if (method is null)
{
Log.LogError("Could not find Interop/Sys.GetCryptographicallySecureRandomBytes(Byte*, Int32).");
return false;
}
var nonSecureMethod = method.Module.ImportReference(
sys.Methods.First(m =>
m.Name == "GetNonCryptographicallySecureRandomBytes" &&
m.Parameters.Count == 2));
method.Body.Variables.Clear();
method.Body.ExceptionHandlers.Clear();
method.Body.Instructions.Clear();
var il = method.Body.GetILProcessor();
il.Append(il.Create(OpCodes.Ldarg_0));
il.Append(il.Create(OpCodes.Ldarg_1));
il.Append(il.Create(OpCodes.Call, nonSecureMethod));
il.Append(il.Create(OpCodes.Ldc_I4_0));
il.Append(il.Create(OpCodes.Ret));
assembly.Write();
Log.LogMessage(MessageImportance.High, "Patched Interop/Sys.GetCryptographicallySecureRandomBytes return IL for NativeAOT.");
return true;
]]>