Exemple #1
0
        internal void BuildRelocSection()
        {
            // do entry point reloc
            uint relocPage = entryPointReloc / Section.relocPageSize;
            uint pageOff   = relocPage * Section.relocPageSize;

            reloc.Write(text.RVA() + pageOff);
            reloc.Write(12);
            uint fixUpOff = entryPointReloc - pageOff;

            reloc.Write((ushort)((0x3 << 12) | fixUpOff));
            reloc.Write((ushort)0);
            // text.DoRelocs(reloc);
            if (sdata != null)
            {
                sdata.DoRelocs(reloc);
            }
            if (rsrc != null)
            {
                rsrc.DoRelocs(reloc);
            }
            relocTide = (uint)reloc.Seek(0, SeekOrigin.Current);
            //reloc.Write((uint)0);
            if (Diag.DiagOn)
            {
                Console.WriteLine("relocTide = " + relocTide);
            }
            relocPadding  = NumToAlign(relocTide, verInfo.fileAlign);
            relocSize     = relocTide + relocPadding;
            imageSize     = relocRVA + FileImage.SectionAlignment;
            initDataSize += relocSize;
        }