Esempio n. 1
0
        public IEnumerable <IMAGE_IMPORT_DESCRIPTOR> EnumImports()
        {
            IMAGE_DATA_DIRECTORY iteratorVariable0 = this.NTHeader.OptionalHeader.DataDirectory[1];

            if (iteratorVariable0.Size > 0)
            {
                IMAGE_IMPORT_DESCRIPTOR iteratorVariable3;
                uint ptrFromRVA        = this.GetPtrFromRVA(iteratorVariable0.VirtualAddress);
                uint iteratorVariable2 = typeof(IMAGE_IMPORT_DESCRIPTOR).SizeOf();
                while ((this.Read <IMAGE_IMPORT_DESCRIPTOR>((long)ptrFromRVA, SeekOrigin.Begin, out iteratorVariable3) && (iteratorVariable3.OriginalFirstThunk > 0)) && (iteratorVariable3.Name > 0))
                {
                    yield return(iteratorVariable3);

                    ptrFromRVA += iteratorVariable2;
                }
            }
        }
Esempio n. 2
0
        /// <summary>Enumerate the import descriptors of the current PortableExecutable</summary>
        /// <returns>An IEnumerable of IMAGE_IMPORT_DESCRIPTOR structures, each of which represents a single module to import</returns>
        public IEnumerable <IMAGE_IMPORT_DESCRIPTOR> EnumImports()
        {
            IMAGE_DATA_DIRECTORY impDir = this.NTHeader.OptionalHeader.DataDirectory[(int)DATA_DIRECTORIES.ImportTable];

            if (impDir.Size > 0)
            {
                uint pDesc  = GetPtrFromRVA(impDir.VirtualAddress);
                uint szDesc = typeof(IMAGE_IMPORT_DESCRIPTOR).SizeOf();
                IMAGE_IMPORT_DESCRIPTOR desc;
                while (base.Read(pDesc, SeekOrigin.Begin, out desc) && desc.OriginalFirstThunk > 0 && desc.Name > 0)
                {
                    yield return(desc);

                    pDesc += szDesc;
                }
            }
        }
Esempio n. 3
0
        public IEnumerable <IMAGE_IMPORT_DESCRIPTOR> EnumImports()
        {
            IMAGE_DATA_DIRECTORY iMAGE_DATA_DIRECTORY = this.NTHeader.OptionalHeader.DataDirectory[1];

            if (iMAGE_DATA_DIRECTORY.Size > 0u)
            {
                uint num  = this.GetPtrFromRVA(iMAGE_DATA_DIRECTORY.VirtualAddress);
                uint num2 = typeof(IMAGE_IMPORT_DESCRIPTOR).SizeOf();
                IMAGE_IMPORT_DESCRIPTOR iMAGE_IMPORT_DESCRIPTOR;
                while (base.Read <IMAGE_IMPORT_DESCRIPTOR>((long)((ulong)num), SeekOrigin.Begin, out iMAGE_IMPORT_DESCRIPTOR) && iMAGE_IMPORT_DESCRIPTOR.OriginalFirstThunk > 0u && iMAGE_IMPORT_DESCRIPTOR.Name > 0u)
                {
                    yield return(iMAGE_IMPORT_DESCRIPTOR);

                    num += num2;
                }
            }
            yield break;
        }
Esempio n. 4
0
        public ResourceWalker(JLibrary.PortableExecutable.PortableExecutable image)
        {
            IMAGE_DATA_DIRECTORY image_data_directory = image.NTHeader.OptionalHeader.DataDirectory[2];
            uint root = 0;

            if ((image_data_directory.VirtualAddress > 0) && (image_data_directory.Size > 0))
            {
                IMAGE_RESOURCE_DIRECTORY image_resource_directory;
                if (!image.Read <IMAGE_RESOURCE_DIRECTORY>((long)(root = image.GetPtrFromRVA(image_data_directory.VirtualAddress)), SeekOrigin.Begin, out image_resource_directory))
                {
                    throw image.GetLastError();
                }
                IMAGE_RESOURCE_DIRECTORY_ENTRY entry = new IMAGE_RESOURCE_DIRECTORY_ENTRY {
                    SubdirectoryRva = 0x80000000
                };
                this.Root = new ResourceDirectory(image, entry, false, root);
            }
        }
        public ResourceWalker(PortableExecutable image)
        {
            IMAGE_DATA_DIRECTORY     rsrcDir = image.NTHeader.OptionalHeader.DataDirectory[(int)DATA_DIRECTORIES.ResourceTable];
            IMAGE_RESOURCE_DIRECTORY rootDir;
            uint rootAddr = 0;

            if (rsrcDir.VirtualAddress > 0 && rsrcDir.Size > 0)
            {
                if (image.Read((rootAddr = image.GetPtrFromRVA(rsrcDir.VirtualAddress)), System.IO.SeekOrigin.Begin, out rootDir))
                {
                    this.Root = new ResourceDirectory(image, new IMAGE_RESOURCE_DIRECTORY_ENTRY()
                    {
                        SubdirectoryRva = 0x80000000
                    }, false, rootAddr);
                }
                else
                {
                    throw image.GetLastError();
                }
            }
        }
Esempio n. 6
0
        public ResourceWalker(PortableExecutable image)
        {
            IMAGE_DATA_DIRECTORY iMAGE_DATA_DIRECTORY = image.NTHeader.OptionalHeader.DataDirectory[2];

            if (iMAGE_DATA_DIRECTORY.VirtualAddress <= 0u || iMAGE_DATA_DIRECTORY.Size <= 0u)
            {
                return;
            }
            uint ptrFromRVA;
            IMAGE_RESOURCE_DIRECTORY iMAGE_RESOURCE_DIRECTORY;

            if (image.Read <IMAGE_RESOURCE_DIRECTORY>((long)((ulong)(ptrFromRVA = image.GetPtrFromRVA(iMAGE_DATA_DIRECTORY.VirtualAddress))), SeekOrigin.Begin, out iMAGE_RESOURCE_DIRECTORY))
            {
                this.Root = new ResourceWalker.ResourceDirectory(image, new IMAGE_RESOURCE_DIRECTORY_ENTRY
                {
                    SubdirectoryRva = 2147483648u
                }, false, ptrFromRVA);
                return;
            }
            throw image.GetLastError();
        }