Esempio n. 1
0
        protected override void SaveInternal(VirtualWriter wtr)
        {
            root = Location.Address;
            ComputeOffset();

            wtr.Write(c);
            wtr.WriteStamp(stamp);
            wtr.Write(maVer);
            wtr.Write(miVer);
            wtr.Write(noName);
            wtr.Write(noID);
            foreach (ResourceEntry i in es)
            {
                if ((i.Type & EntryType.Name) == EntryType.Name)
                {
                    uint strOffset = strO[i.Name];
                    wtr.Write(strOffset | 0x80000000);

                    wtr.SaveLocation();
                    wtr.SetPosition(root + strOffset);
                    wtr.WriteUnicodeString(i.Name);
                    wtr.LoadLocation();
                }
                else if ((i.Type & EntryType.ID) == EntryType.ID)
                {
                    wtr.Write(i.ID);
                }

                if ((i.Type & EntryType.Subdirectory) == EntryType.Subdirectory)
                {
                    uint dirOffset = dirO[i.Data as Subdirectory];
                    wtr.Write(dirOffset | 0x80000000);

                    wtr.SaveLocation();
                    wtr.SetPosition(root + dirOffset);
                    (i.Data as Subdirectory).Save(wtr, this);
                    wtr.LoadLocation();
                }
                else if ((i.Type & EntryType.DataEntry) == EntryType.DataEntry)
                {
                    uint dateOffset = dateO[i.Data as DataEntry];
                    wtr.Write(dateOffset);

                    wtr.SaveLocation();
                    wtr.SetPosition(root + dateOffset);
                    (i.Data as DataEntry).Save(wtr, this);
                    wtr.LoadLocation();
                }
            }
        }
Esempio n. 2
0
            internal void Save(VirtualWriter wtr, ResourceDirectory dir)
            {
                wtr.Write(c);
                wtr.WriteStamp(stamp);
                wtr.Write(maVer);
                wtr.Write(miVer);
                wtr.Write(noName);
                wtr.Write(noID);
                foreach (ResourceEntry i in Items)
                {
                    if ((i.Type & EntryType.Name) == EntryType.Name)
                    {
                        uint strOffset = dir.strO[i.Name];
                        wtr.Write(strOffset | 0x80000000);

                        wtr.SaveLocation();
                        wtr.SetPosition(dir.root + strOffset);
                        wtr.WriteUnicodeString(i.Name);
                        wtr.LoadLocation();
                    }
                    else if ((i.Type & EntryType.ID) == EntryType.ID)
                    {
                        wtr.Write(i.ID);
                    }

                    if ((i.Type & EntryType.Subdirectory) == EntryType.Subdirectory)
                    {
                        uint dirOffset = dir.dirO[i.Data as Subdirectory];
                        wtr.Write(dirOffset | 0x80000000);

                        wtr.SaveLocation();
                        wtr.SetPosition(dir.root + dirOffset);
                        (i.Data as Subdirectory).Save(wtr, dir);
                        wtr.LoadLocation();
                    }
                    else if ((i.Type & EntryType.DataEntry) == EntryType.DataEntry)
                    {
                        uint dateOffset = dir.dateO[i.Data as DataEntry];
                        wtr.Write(dateOffset);

                        wtr.SaveLocation();
                        wtr.SetPosition(dir.root + dateOffset);
                        (i.Data as DataEntry).Save(wtr, dir);
                        wtr.LoadLocation();
                    }
                }
            }
Esempio n. 3
0
            internal void Save(VirtualWriter wtr, ResourceDirectory dir)
            {
                uint datOffset = dir.datO[dat];

                wtr.Write(datOffset);
                wtr.Write(dat.Length);
                wtr.Write(cp);
                wtr.Write((uint)0);

                wtr.SaveLocation();
                wtr.SetPosition(datOffset);
                wtr.Write(dat);
                wtr.LoadLocation();
            }
Esempio n. 4
0
            internal void Save(VirtualWriter wtr)
            {
                Rva fdrAdr = (Rva)wtr.GetPosition() + GetPointersSize();

                foreach (ExportAddressEntry i in Items)
                {
                    if (i.Type == ExportAddressType.RealExport)
                    {
                        wtr.Write(i.Address);
                    }
                    else
                    {
                        wtr.Write(fdrAdr);
                        fdrAdr += (uint)i.Forwarder.Length + 1;
                        wtr.SaveLocation();
                        wtr.SetPosition(fdrAdr);
                        wtr.Write(i.Forwarder);
                        wtr.LoadLocation();
                    }
                }
            }