コード例 #1
0
ファイル: DumpNativeResources.cs プロジェクト: z77ma/runtime
        public override bool Execute()
        {
            using (FileStream fs = File.OpenRead(MainAssembly))
                using (PEReader peFile = new PEReader(fs))
                {
                    DirectoryEntry resourceDirectory = peFile.PEHeaders.PEHeader.ResourceTableDirectory;
                    if (resourceDirectory.Size != 0 &&
                        peFile.PEHeaders.TryGetDirectoryOffset(resourceDirectory, out int rsrcOffset))
                    {
                        using (var bw = new BinaryWriter(File.OpenWrite(ResourceFile)))
                        {
                            ResWriter.WriteResources(peFile, rsrcOffset, resourceDirectory.Size, bw);
                        }
                    }
                    else
                    {
                        if (File.Exists(ResourceFile))
                        {
                            try
                            {
                                File.Delete(ResourceFile);
                            }
                            catch { }
                        }
                    }
                }

            return(true);
        }
コード例 #2
0
ファイル: DumpNativeResources.cs プロジェクト: z77ma/runtime
        public static void WriteResources(PEReader reader, int rsrcOffset, int rsrcSize, BinaryWriter bw)
        {
            var rw = new ResWriter(reader.GetEntireImage(), reader, rsrcOffset, rsrcSize, bw);

            // First entry is a null resource entry

            bw.Write(new byte[] {
                0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            });

            rw.DumpDirectory(reader.GetEntireImage().GetReader(rsrcOffset, rsrcSize), 0);
        }