private FunctionPointerType /*?*/ GetStandAloneMethodSignature( uint standAloneMethodToken ) { StandAloneSigRow sigRow = this.PEFileToObjectModel.PEFileReader.StandAloneSigTable[standAloneMethodToken & TokenTypeIds.RIDMask]; uint signatureBlobOffset = sigRow.Signature; // TODO: error checking offset in range MemoryBlock signatureMemoryBlock = this.PEFileToObjectModel.PEFileReader.BlobStream.GetMemoryBlockAt(signatureBlobOffset); // TODO: Error checking enough space in signature memoryBlock. MemoryReader memoryReader = new MemoryReader(signatureMemoryBlock); // TODO: Check if this is really field signature there. StandAloneMethodSignatureConverter standAloneSigConv = new StandAloneMethodSignatureConverter(this.PEFileToObjectModel, this.MethodDefinition, memoryReader); if (standAloneSigConv.ReturnTypeReference == null) { return(null); } return (new FunctionPointerType( this.PEFileToObjectModel, 0xFFFFFFFF, (CallingConvention)standAloneSigConv.FirstByte, standAloneSigConv.ReturnCustomModifiers, standAloneSigConv.IsReturnByReference, standAloneSigConv.ReturnTypeReference, standAloneSigConv.RequiredParameters, standAloneSigConv.VarArgParameters )); }
FunctionPointerType/*?*/ GetStandAloneMethodSignature(uint standAloneMethodToken) { StandAloneSigRow sigRow = this.PEFileToObjectModel.PEFileReader.StandAloneSigTable[standAloneMethodToken & TokenTypeIds.RIDMask]; uint signatureBlobOffset = sigRow.Signature; // TODO: error checking offset in range MemoryBlock signatureMemoryBlock = this.PEFileToObjectModel.PEFileReader.BlobStream.GetMemoryBlockAt(signatureBlobOffset); // TODO: Error checking enough space in signature memoryBlock. MemoryReader memoryReader = new MemoryReader(signatureMemoryBlock); // TODO: Check if this is really field signature there. StandAloneMethodSignatureConverter standAloneSigConv = new StandAloneMethodSignatureConverter(this.PEFileToObjectModel, this.MethodDefinition, memoryReader); if (standAloneSigConv.ReturnTypeReference == null) return null; return new FunctionPointerType((CallingConvention)standAloneSigConv.FirstByte, standAloneSigConv.IsReturnByReference, standAloneSigConv.ReturnTypeReference, standAloneSigConv.ReturnCustomModifiers, standAloneSigConv.RequiredParameters, standAloneSigConv.VarArgParameters, this.PEFileToObjectModel.InternFactory); }