Esempio n. 1
0
 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);
 }
Esempio n. 2
0
 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);
 }
Esempio n. 3
0
        /// <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);
        }