// helpers
        private PropertyInfo CreatePropInfo(ExportedSymbol prop)
        {
            var pi = new ReflectedPropertyInfo(prop.SymbolicName);

            pi.SetDispId(prop.Index);
            return(pi);
        }
 /// <summary>
 /// When the symbol is exported by name, adds the ordinal and name pointer pair to the buffer.
 /// </summary>
 /// <param name="symbol">The symbol to register.</param>
 public void AddSymbol(ExportedSymbol symbol)
 {
     if (symbol.IsByName)
     {
         _namedEntries.Add(symbol);
         _ordinals.Add((ushort)(symbol.Ordinal - symbol.ParentDirectory.BaseOrdinal));
     }
 }
        private ReflectedMethodInfo CreateMethodInfo(ExportedSymbol engineMethod)
        {
            var methInfo        = _module.Methods[engineMethod.Index].Signature;
            var reflectedMethod = new ReflectedMethodInfo(methInfo.Name);

            reflectedMethod.SetDispId(engineMethod.Index);
            reflectedMethod.IsFunction = methInfo.IsFunction;
            for (int i = 0; i < methInfo.Params.Length; i++)
            {
                var currentParam   = methInfo.Params[i];
                var reflectedParam = new ReflectedParamInfo("param" + i.ToString(), currentParam.IsByValue);
                reflectedParam.SetOwner(reflectedMethod);
                reflectedParam.SetPosition(i);
                reflectedMethod.Parameters.Add(reflectedParam);
            }

            return(reflectedMethod);
        }
        public void PersistentExportedSymbol()
        {
            var image = PEImage.FromBytes(Properties.Resources.HelloWorld);

            // Prepare mock.
            var exportDirectory = new ExportDirectory("HelloWorld.dll");
            var exportedSymbol  = new ExportedSymbol(new VirtualAddress(0x12345678), "TestExport");

            exportDirectory.Entries.Add(exportedSymbol);
            image.Exports = exportDirectory;

            // Rebuild.
            var newImage = RebuildAndReloadManagedPE(image);

            // Verify.
            Assert.Equal(1, newImage.Exports.Entries.Count);
            var newExportedSymbol = newImage.Exports.Entries[0];

            Assert.Equal(exportedSymbol.Name, newExportedSymbol.Name);
            Assert.Equal(exportedSymbol.Ordinal, newExportedSymbol.Ordinal);
            Assert.Equal(exportedSymbol.Address.Rva, newExportedSymbol.Address.Rva);
        }
 /// <summary>
 /// Adds a single symbol to the address table buffer.
 /// </summary>
 /// <param name="symbol">The symbol to add.</param>
 public void AddSymbol(ExportedSymbol symbol) => _entries.Add(symbol);
Exemple #6
0
        private ReflectedMethodInfo CreateMethodInfo(ExportedSymbol engineMethod)
        {
            var methInfo = _module.Methods[engineMethod.Index].Signature;
            var reflectedMethod = new ReflectedMethodInfo(methInfo.Name);
            reflectedMethod.SetDispId(engineMethod.Index);
            reflectedMethod.IsFunction = methInfo.IsFunction;
            for (int i = 0; i < methInfo.Params.Length; i++)
            {
                var currentParam = methInfo.Params[i];
                var reflectedParam = new ReflectedParamInfo("param" + i.ToString(), currentParam.IsByValue);
                reflectedParam.SetOwner(reflectedMethod);
                reflectedParam.SetPosition(i);
                reflectedMethod.Parameters.Add(reflectedParam);
            }

            return reflectedMethod;

        }
Exemple #7
0
 // helpers
 private PropertyInfo CreatePropInfo(ExportedSymbol prop)
 {
     var pi = new ReflectedPropertyInfo(prop.SymbolicName);
     pi.SetDispId(prop.Index);
     return pi;
 }