public FileSegment GetModuleNameSegment(ImageModuleImport moduleImport) { FileSegment segment; if (!_moduleNameSegments.TryGetValue(moduleImport, out segment)) { Segments.Add(segment = DataSegment.CreateAsciiString(moduleImport.Name, true)); _moduleNameSegments.Add(moduleImport, segment); } return(segment); }
public void AddSymbolExport(ImageSymbolExport export) { if (export.Name != null) { export.NameOrdinal = (uint)(_addressesTable.Segments.Count + _exportDirectory.OrdinalBase); _nameOrdinalTable.Segments.Add( new DataSegment(BitConverter.GetBytes((ushort)_addressesTable.Segments.Count))); var nameSegment = DataSegment.CreateAsciiString(export.Name, true); _namesTable.Segments.Add(nameSegment); _nameRvaTable.Segments.Add(new PointerSegment(nameSegment, _converter, true)); } _addressesTable.Segments.Add(DataSegment.CreateNativeInteger(export.Rva, true)); }
public ExportDirectoryBuffer(ImageExportDirectory exportDirectory, IOffsetConverter converter) { if (exportDirectory == null) { throw new ArgumentNullException("exportDirectory"); } _converter = converter; Segments.Add(_exportDirectory = exportDirectory); Segments.Add(_nameSegment = DataSegment.CreateAsciiString(_exportDirectory.Name, true)); Segments.Add(_nameRvaTable = new SimpleFileSegmentBuilder()); Segments.Add(_nameOrdinalTable = new SimpleFileSegmentBuilder()); Segments.Add(_addressesTable = new SimpleFileSegmentBuilder()); Segments.Add(_namesTable = new SimpleFileSegmentBuilder()); foreach (var export in exportDirectory.Exports) { AddSymbolExport(export); } }