public static byte[]? PatchCallingConventionSignature(List <byte> sigBuilder, RemappedTypeTokens remappedTypeTokens, RawModuleBytes moduleData, uint blobOffset, uint sigOffset) { try { var patcher = new MDSigPatcher(sigBuilder, remappedTypeTokens, moduleData, blobOffset, sigOffset); patcher.PatchCallingConventionSignature(); return(patcher.GetResult()); } catch (InvalidSignatureException) { } Debug.Fail("Failed to patch calling convention sig"); return(null); }
public static byte[] PatchTypeSignature(List <byte> sigBuilder, Dictionary <uint, uint> remappedTypeTokens, byte[] moduleData, uint blobOffset, uint sigOffset) { try { var patcher = new MDSigPatcher(sigBuilder, remappedTypeTokens, moduleData, blobOffset, sigOffset); patcher.PatchTypeSignature(); return(patcher.GetResult()); } catch (InvalidSignatureException) { } Debug.Fail("Failed to patch type sig"); return(null); }
/// <summary> /// Patches the signature. If it didn't need to be patched or if it was an in-place patch, /// the same signature is returned. /// </summary> uint PatchCallingConventionSignature(Dictionary <uint, uint> callConvSigDict, uint sig) { if (callConvSigDict.TryGetValue(sig, out var newSig)) { return(newSig); } var data = MDSigPatcher.PatchCallingConventionSignature(sigBuilder, remappedTypeTokens, moduleData, (uint)mdEditor.RealMetadata.BlobStream.StartOffset, sig); if (data != null) { newSig = mdEditor.BlobHeap.Create(data); } else { newSig = sig; } callConvSigDict.Add(sig, newSig); return(newSig); }