PERWAPI.PEReader.GetDataConstant C# (CSharp) Method

GetDataConstant() private method

private GetDataConstant ( uint rva, Type constType ) : DataConstant
rva uint
constType Type
return DataConstant
        internal DataConstant GetDataConstant(uint rva, Type constType)
        {
            BaseStream.Seek(GetOffset(rva),SeekOrigin.Begin);
            if (constType is PrimitiveType) {
                switch (constType.GetTypeIndex()) {
                    case ((int)ElementType.I1) : return new IntConst(ReadByte());
                    case ((int)ElementType.I2) : return new IntConst(ReadInt16());
                    case ((int)ElementType.I4) : return new IntConst(ReadInt32());
                    case ((int)ElementType.I8) : return new IntConst(ReadInt64());
                    case ((int)ElementType.R4) : return new FloatConst(ReadSingle());
                    case ((int)ElementType.R8) : return new DoubleConst(ReadDouble());
                    case ((int)ElementType.String) : return new StringConst(ReadString());
                }
            } else if (constType is ManagedPointer) {
                uint dataRVA = ReadUInt32();
                Type baseType = ((ManagedPointer)constType).GetBaseType();
                return new AddressConstant(GetDataConstant(dataRVA,baseType));
            } // need to do repeated constant??
            return null;
        }

Usage Example

Ejemplo n.º 1
0
 internal override sealed void Resolve(PEReader buff)
 {
     field = (FieldDef)buff.GetElement(MDTable.Field,fieldIx);
     field.AddDataValue(buff.GetDataConstant(rva,field.GetFieldType()));
 }