// 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);
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; }
// helpers private PropertyInfo CreatePropInfo(ExportedSymbol prop) { var pi = new ReflectedPropertyInfo(prop.SymbolicName); pi.SetDispId(prop.Index); return pi; }