Esempio n. 1
0
            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);
            }
        }