retdec
PeLibAux.h
Go to the documentation of this file.
1 /*
2 * PeLibAux.cpp - Part of the PeLib library.
3 *
4 * Copyright (c) 2004 - 2005 Sebastian Porst (webmaster@the-interweb.com)
5 * All rights reserved.
6 *
7 * This software is licensed under the zlib/libpng License.
8 * For more details see http://www.opensource.org/licenses/zlib-license.php
9 * or the license information file (license.htm) in the root directory
10 * of PeLib.
11 */
12 
13 #ifndef RETDEC_PELIB_PELIBAUX_H
14 #define RETDEC_PELIB_PELIBAUX_H
15 
16 #include <numeric>
17 #include <string.h>
18 
19 #ifdef _MSC_VER // Reduces number of warnings under MS Visual Studio from ~100000 to zero
20 #pragma warning(disable:4267) // C4267: 'initializing': conversion from 'size_t' to '_Ty2', possible loss of data
21 #pragma warning(disable:4244) // C4244: 'argument': conversion from 'uint64_t' to 'unsigned int', possible loss of data
22 #endif
23 
24 //get rid of duplicate windows.h definitions
25 #ifdef ERROR_NONE
26 #undef ERROR_NONE
27 #endif
28 
29 namespace PeLib
30 {
32  {
44  };
45 
47  {
48  LDR_ERROR_NONE = 0, // No error
49  LDR_ERROR_FILE_TOO_BIG, // The file is larger than 0xFFFFFFFF bytes
50  LDR_ERROR_E_LFANEW_UNALIGNED, // The IMAGE_DOS_HEADER::e_lfanew is not aligned to 4
51  LDR_ERROR_E_LFANEW_OUT_OF_FILE, // The IMAGE_DOS_HEADER::e_lfanew is out of (lower 4 GB of) the file
52  LDR_ERROR_NTHEADER_OFFSET_OVERFLOW, // NT header offset + sizeof(IMAGE_NT_HEADERS) overflow
53  LDR_ERROR_NTHEADER_OUT_OF_FILE, // NT header offset + sizeof(IMAGE_NT_HEADERS) is greater than filesize
54  LDR_ERROR_NO_NT_SIGNATURE, // Missing IMAGE_NT_SIGNATURE in the NT headers
55  LDR_ERROR_FILE_HEADER_INVALID, // Invalid IMAGE_FILE_HEADER::Machine or IMAGE_FILE_HEADER::SizeOfOptionalHeader
56  LDR_ERROR_IMAGE_NON_EXECUTABLE, // Missing IMAGE_FILE_EXECUTABLE_IMAGE in IMAGE_FILE_HEADER::Characteristics
57  LDR_ERROR_NO_OPTHDR_MAGIC, // Invalid IMAGE_OPTIONAL_HEADER::Magic
58  LDR_ERROR_SIZE_OF_HEADERS_ZERO, // IMAGE_OPTIONAL_HEADER::SizeOfHeaders is zero
59  LDR_ERROR_FILE_ALIGNMENT_ZERO, // IMAGE_OPTIONAL_HEADER::FileAlignment is zero
60  LDR_ERROR_FILE_ALIGNMENT_NOT_POW2, // IMAGE_OPTIONAL_HEADER::FileAlignment is not power of two
61  LDR_ERROR_SECTION_ALIGNMENT_ZERO, // IMAGE_OPTIONAL_HEADER::SectionAlignment is zero
62  LDR_ERROR_SECTION_ALIGNMENT_NOT_POW2, // IMAGE_OPTIONAL_HEADER::SectionAlignment is not power of two
63  LDR_ERROR_SECTION_ALIGNMENT_TOO_SMALL, // IMAGE_OPTIONAL_HEADER::SectionAlignment is less than IMAGE_OPTIONAL_HEADER::FileAlignment
64  LDR_ERROR_SECTION_ALIGNMENT_INVALID, // IMAGE_OPTIONAL_HEADER::SectionAlignment must be equal to IMAGE_OPTIONAL_HEADER::FileAlignment if (FileAlignment < 512)
65  LDR_ERROR_SIZE_OF_IMAGE_TOO_BIG, // IMAGE_OPTIONAL_HEADER::SizeOfImage is too big
66  LDR_ERROR_INVALID_MACHINE32, // IMAGE_FILE_HEADER::Machine is invalid for IMAGE_OPTIONAL_HEADER::Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC
67  LDR_ERROR_INVALID_MACHINE64, // IMAGE_FILE_HEADER::Machine is invalid for IMAGE_OPTIONAL_HEADER::Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC
68  LDR_ERROR_SIZE_OF_HEADERS_INVALID, // IMAGE_OPTIONAL_HEADER::SizeOfHeaders is greater than IMAGE_OPTIONAL_HEADER::SizeOfImage
69  LDR_ERROR_SIZE_OF_OPTHDR_NOT_ALIGNED, // IMAGE_OPTIONAL_HEADER::SizeOfHeaders is not aligned to 8 (64-bit Windows only)
70  LDR_ERROR_SIZE_OF_IMAGE_ZERO, // Number of PTEs for the entire image is zero
71  LDR_ERROR_IMAGE_BASE_NOT_ALIGNED, // IMAGE_OPTIONAL_HEADER::ImageBase is not aligned to 64KB
72  LDR_ERROR_SIZE_OF_IMAGE_PTES_ZERO, // Number of Page Table Entries for the image is zero
73  LDR_ERROR_RAW_DATA_OVERFLOW, // Overflow in section's raw data size
74  LDR_ERROR_SECTION_HEADERS_OUT_OF_IMAGE, // Section headers are out of the image
75  LDR_ERROR_SECTION_HEADERS_OVERFLOW, // Image with single subsection: size of headers is near the end of range
76  LDR_ERROR_SECTION_SIZE_MISMATCH, // Image with single subsection: virtual values with rawdata values don't match
77  LDR_ERROR_INVALID_SECTION_VA, // Images with normal sections: invalid virtual address of a section
78  LDR_ERROR_INVALID_SECTION_VSIZE, // Images with normal sections: invalid virtual size of a section
79  LDR_ERROR_INVALID_SECTION_RAWSIZE, // Images with normal sections: invalid raw data size
80  LDR_ERROR_INVALID_SIZE_OF_IMAGE, // IMAGE_OPTIONAL_HEADER::SizeOfImage doesn't match the (header+sections)
81  LDR_ERROR_FILE_IS_CUT, // The PE file is cut
82  LDR_ERROR_FILE_IS_CUT_LOADABLE, // The PE file is cut, but loadable
83 
84  // Errors from Import Table parser
85  LDR_ERROR_IMPDIR_OUT_OF_FILE, // Offset of the import directory is out of the file
86  LDR_ERROR_IMPDIR_CUT, // Import directory is cut
87  LDR_ERROR_IMPDIR_COUNT_EXCEEDED, // Number of import descriptors exceeds maximum
88  LDR_ERROR_IMPDIR_NAME_RVA_INVALID, // RVA of the import name is invalid
89  LDR_ERROR_IMPDIR_THUNK_RVA_INVALID, // RVA of the import thunk is invalid
90  LDR_ERROR_IMPDIR_IMPORT_COUNT_EXCEEDED, // Number of imported functions exceeds maximum
91 
92  // Errors from resource parser
93  LDR_ERROR_RSRC_OVER_END_OF_IMAGE, // Array of resource directory entries goes beyond end of the image
94  LDR_ERROR_RSRC_NAME_OUT_OF_IMAGE, // One of the resource names points out of the image
95  LDR_ERROR_RSRC_DATA_OUT_OF_IMAGE, // One of the resource data points out of the image
96  LDR_ERROR_RSRC_SUBDIR_OUT_OF_IMAGE, // One of the resource subdirectories points out of the image
97 
98  // Errors from entry point checker
99  LDR_ERROR_ENTRY_POINT_OUT_OF_IMAGE, // The entry point is out of the image
100  LDR_ERROR_ENTRY_POINT_ZEROED, // The entry point is zeroed
101 
102  // Errors from signature parser
103  LDR_ERROR_DIGITAL_SIGNATURE_CUT, // The file signature is out of the file
104  LDR_ERROR_DIGITAL_SIGNATURE_ZEROED, // The file signature is zeroed
105 
106  // Errors from relocations
107  LDR_ERROR_RELOCATIONS_OUT_OF_IMAGE, // The relocation directory points out of the image
108  LDR_ERROR_RELOC_BLOCK_INVALID_VA, // A relocation block has invalid virtual address
109  LDR_ERROR_RELOC_BLOCK_INVALID_LENGTH, // A relocation block has invalid length
110  LDR_ERROR_RELOC_ENTRY_BAD_TYPE, // A relocation entry has invalid type
111 
112  // Other errors
113  LDR_ERROR_INMEMORY_IMAGE, // The file is a 1:1 in-memory image
114 
116 
117  };
118 
120  {
121  const char * loaderErrorString;
124  };
125 
126  class PeFile;
127 
128  typedef std::vector<std::uint8_t> ByteBuffer;
129 
130  enum
131  {
132  PEFILE32 = 32,
133  PEFILE64 = 64,
134  PEFILE_UNKNOWN = 0
135  };
136 
137  const std::uint16_t PELIB_IMAGE_DOS_SIGNATURE = 0x5A4D;
138 
139  const std::uint32_t PELIB_PAGE_SIZE = 0x1000;
140 
141  const std::uint32_t PELIB_PAGE_SIZE_SHIFT = 12;
142 
143  const std::uint32_t PELIB_SIZE_64KB = 0x10000;
144 
145  const std::uint32_t PELIB_SIZE_10MB = 0xA00000;
146 
147  const std::uint32_t PELIB_IMAGE_NT_SIGNATURE = 0x00004550;
148 
149  const std::uint32_t PELIB_MM_SIZE_OF_LARGEST_IMAGE = 0x77000000;
150 
151  const std::uint32_t PELIB_MAX_TLS_CALLBACKS = 0x100; // Maximum number of processed TLS callbacks
152  const std::uint32_t PELIB_MAX_IMPORT_DLLS = 0x100; // Maximum number of imported DLLs we consider OK
153  const std::uint32_t PELIB_MAX_IMPORTED_FUNCTIONS = 0x1000; // Maximum number of exported functions (per DLL) that we support
154  const std::uint32_t PELIB_MAX_EXPORTED_FUNCTIONS = 0x1000; // Maximum number of exported functions that we support
155  const std::uint32_t PE_MAX_SECTION_COUNT_XP = 96;
156  const std::uint32_t PE_MAX_SECTION_COUNT_7 = 192;
157 
158  const std::uint32_t PELIB_SECTOR_SIZE = 0x200;
159 
160  const std::uint32_t PELIB_IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16;
161 
162  const std::uint32_t PELIB_IMAGE_RESOURCE_DATA_IS_DIRECTORY = 0x80000000;
163  const std::uint32_t PELIB_IMAGE_RESOURCE_NAME_IS_STRING = 0x80000000;
164  const std::uint32_t PELIB_IMAGE_RESOURCE_RVA_MASK = 0x7FFFFFFF;
165  const std::uint16_t PELIB_MAX_RESOURCE_ENTRIES = 0x8000; // Maximum number of resource directory entries we consider OK
166 
167  enum : std::uint32_t
168  {
184  };
185 
186  enum : std::uint32_t
187  {
196  };
197 
198  enum : std::uint32_t
199  {
209  PELIB_IMAGE_SCN_GPREL = 0x00008000,
236  PELIB_IMAGE_SCN_MEM_WRITE = 0x80000000U
237  };
238 
239  enum PELIB_IMAGE_FILE_MACHINE : std::uint16_t
240  {
243  PELIB_IMAGE_FILE_MACHINE_I486 = 0x014D, // https://corkami.googlecode.com/svn/wiki/PE.wiki
244  PELIB_IMAGE_FILE_MACHINE_PENTIUM = 0x014E, // https://corkami.googlecode.com/svn/wiki/PE.wiki
276  };
277 
278  enum : std::uint32_t
279  {
295  };
296 
297  enum : std::uint16_t
298  {
309  };
310 
311  enum : std::uint16_t
312  {
316  };
317 
318  enum : std::uint16_t
319  {
328  };
329 
330  enum : uint16_t
331  {
340  };
341 
342  enum : std::uint32_t
343  {
344  PELIB_RT_CURSOR = 1, // 1
367  };
368 
369  enum : std::uint16_t
370  {
492  PELIB_LANG_MALAGASY = 0x8D
493  };
494 
495  template<typename T>
496  unsigned int accumulate(unsigned int size, const T& v)
497  {
498  return size + v.size();
499  }
500 
502  {
503  public:
504  typedef std::vector<PELIB_IMAGE_FILE_MACHINE>::const_iterator imageFileMachineIterator;
505  private:
506  const std::vector<PELIB_IMAGE_FILE_MACHINE> all =
507  {
543  };
544  public:
547 
551  };
552 
554  {
555  std::uint16_t e_magic;
556  std::uint16_t e_cblp;
557  std::uint16_t e_cp;
558  std::uint16_t e_crlc;
559  std::uint16_t e_cparhdr;
560  std::uint16_t e_minalloc;
561  std::uint16_t e_maxalloc;
562  std::uint16_t e_ss;
563  std::uint16_t e_sp;
564  std::uint16_t e_csum;
565  std::uint16_t e_ip;
566  std::uint16_t e_cs;
567  std::uint16_t e_lfarlc;
568  std::uint16_t e_ovno;
569  std::uint16_t e_res[4];
570  std::uint16_t e_oemid;
571  std::uint16_t e_oeminfo;
572  std::uint16_t e_res2[10];
573  std::uint32_t e_lfanew;
574 
576  {
577  memset(this, 0, sizeof(PELIB_IMAGE_DOS_HEADER));
578  }
579 
580  static inline std::size_t size()
581  {
582  return 64;
583  }
584  };
585 
587  {
588  std::uint16_t Machine;
589  std::uint16_t NumberOfSections;
590  std::uint32_t TimeDateStamp;
591  std::uint32_t PointerToSymbolTable;
592  std::uint32_t NumberOfSymbols;
593  std::uint16_t SizeOfOptionalHeader;
594  std::uint16_t Characteristics;
595 
597  {
598  Machine = 0;
599  NumberOfSections = 0;
600  TimeDateStamp = 0;
602  NumberOfSymbols = 0;
604  Characteristics = 0;
605  }
606 
607  static inline std::size_t size()
608  {
609  return 20;
610  }
611  };
612 
614  {
615  std::uint32_t VirtualAddress;
616  std::uint32_t Size;
617 
619  {
620  VirtualAddress = 0;
621  Size = 0;
622  }
623 
624  static inline std::size_t size() {return 8;}
625  };
626 
628  {
629  std::uint16_t Magic;
630  std::uint8_t MajorLinkerVersion;
631  std::uint8_t MinorLinkerVersion;
632  std::uint32_t SizeOfCode;
633  std::uint32_t SizeOfInitializedData;
634  std::uint32_t SizeOfUninitializedData;
635  std::uint32_t AddressOfEntryPoint;
636  std::uint32_t BaseOfCode;
637  std::uint32_t BaseOfData;
638  std::uint32_t ImageBase;
639  std::uint32_t SectionAlignment;
640  std::uint32_t FileAlignment;
643  std::uint16_t MajorImageVersion;
644  std::uint16_t MinorImageVersion;
645  std::uint16_t MajorSubsystemVersion;
646  std::uint16_t MinorSubsystemVersion;
647  std::uint32_t Win32VersionValue;
648  std::uint32_t SizeOfImage;
649  std::uint32_t SizeOfHeaders;
650  std::uint32_t CheckSum;
651  std::uint16_t Subsystem;
652  std::uint16_t DllCharacteristics;
653  std::uint32_t SizeOfStackReserve;
654  std::uint32_t SizeOfStackCommit;
655  std::uint32_t SizeOfHeapReserve;
656  std::uint32_t SizeOfHeapCommit;
657  std::uint32_t LoaderFlags;
658  std::uint32_t NumberOfRvaAndSizes;
659 
661  };
662 
664  {
665  std::uint16_t Magic;
666  std::uint8_t MajorLinkerVersion;
667  std::uint8_t MinorLinkerVersion;
668  std::uint32_t SizeOfCode;
669  std::uint32_t SizeOfInitializedData;
670  std::uint32_t SizeOfUninitializedData;
671  std::uint32_t AddressOfEntryPoint;
672  std::uint32_t BaseOfCode;
673  std::uint64_t ImageBase;
674  std::uint32_t SectionAlignment;
675  std::uint32_t FileAlignment;
678  std::uint16_t MajorImageVersion;
679  std::uint16_t MinorImageVersion;
680  std::uint16_t MajorSubsystemVersion;
681  std::uint16_t MinorSubsystemVersion;
682  std::uint32_t Win32VersionValue;
683  std::uint32_t SizeOfImage;
684  std::uint32_t SizeOfHeaders;
685  std::uint32_t CheckSum;
686  std::uint16_t Subsystem;
687  std::uint16_t DllCharacteristics;
688  std::uint64_t SizeOfStackReserve;
689  std::uint64_t SizeOfStackCommit;
690  std::uint64_t SizeOfHeapReserve;
691  std::uint64_t SizeOfHeapCommit;
692  std::uint32_t LoaderFlags;
693  std::uint32_t NumberOfRvaAndSizes;
694 
696  };
697 
698  // Common structure for both 32-bit and 64-bit PE files
700  {
701  std::uint16_t Magic;
702  std::uint8_t MajorLinkerVersion;
703  std::uint8_t MinorLinkerVersion;
704  std::uint32_t SizeOfCode;
705  std::uint32_t SizeOfInitializedData;
706  std::uint32_t SizeOfUninitializedData;
707  std::uint32_t AddressOfEntryPoint;
708  std::uint32_t BaseOfCode;
709  std::uint32_t BaseOfData;
710  std::uint64_t ImageBase;
711  std::uint32_t SectionAlignment;
712  std::uint32_t FileAlignment;
715  std::uint16_t MajorImageVersion;
716  std::uint16_t MinorImageVersion;
717  std::uint16_t MajorSubsystemVersion;
718  std::uint16_t MinorSubsystemVersion;
719  std::uint32_t Win32VersionValue;
720  std::uint32_t SizeOfImage;
721  std::uint32_t SizeOfHeaders;
722  std::uint32_t CheckSum;
723  std::uint16_t Subsystem;
724  std::uint16_t DllCharacteristics;
725  std::uint64_t SizeOfStackReserve;
726  std::uint64_t SizeOfStackCommit;
727  std::uint64_t SizeOfHeapReserve;
728  std::uint64_t SizeOfHeapCommit;
729  std::uint32_t LoaderFlags;
730  std::uint32_t NumberOfRvaAndSizes;
731 
733  };
734 
735  template<int x>
737  {
738  std::uint32_t Signature;
741  std::vector<PELIB_IMAGE_DATA_DIRECTORY> dataDirectories;
743 
744  unsigned int sizeOfSignature() const
745  {
746  return sizeof(std::uint32_t);
747  }
748 
749  unsigned int size() const
750  {
751  return sizeOfSignature()
754  + static_cast<unsigned int>(dataDirectories.size()) * PELIB_IMAGE_DATA_DIRECTORY::size();
755  }
756 
757  unsigned int loadedSize() const
758  {
759  auto res = size();
761  {
762  res -= sizeof(dataDirectories[0].Size);
763  }
764 
765  return res;
766  }
767 
769  {
770  Signature = 0;
772  }
773  };
774 
775  const unsigned int PELIB_IMAGE_SIZEOF_SHORT_NAME = 8;
776  const unsigned int PELIB_IMAGE_SIZEOF_MAX_NAME = 1024;
777 
779  {
781  {
782  memset(Name, 0, sizeof(Name));
783  VirtualSize = 0;
784  VirtualAddress = 0;
785  SizeOfRawData = 0;
786  PointerToRawData = 0;
791  Characteristics = 0;
792  }
793 
795  std::uint32_t VirtualSize;
796  std::uint32_t VirtualAddress;
797  std::uint32_t SizeOfRawData;
798  std::uint32_t PointerToRawData;
799  std::uint32_t PointerToRelocations;
800  std::uint32_t PointerToLinenumbers;
801  std::uint16_t NumberOfRelocations;
802  std::uint16_t NumberOfLinenumbers;
803  std::uint32_t Characteristics;
804  };
805 
807  {
808  void setName(const char * newName)
809  {
810  // Copy the name to the fixed_length name
812  for(std::size_t i = 0; i < PELIB_IMAGE_SIZEOF_SHORT_NAME; i++)
813  {
814  if(newName[i] == 0)
815  break;
816  Name[i] = newName[i];
817  }
818 
819  // Also put it to the string
820  sectionName = newName;
821  }
822 
823  const std::string & getName() const
824  {
825  return sectionName;
826  }
827 
828  void setVirtualRange(std::uint32_t newVirtualAddress, std::uint32_t newVirtualSize)
829  {
830  if(newVirtualAddress != UINT32_MAX)
831  VirtualAddress = newVirtualAddress;
832  if(newVirtualSize != UINT32_MAX)
833  VirtualSize = newVirtualSize;
834  }
835 
836  void setRawDataRange(std::uint32_t newPointerToRawData, std::uint32_t newSizeOfRawData)
837  {
838  if(newPointerToRawData != UINT32_MAX)
839  PointerToRawData = newPointerToRawData;
840  if(newSizeOfRawData != UINT32_MAX)
841  SizeOfRawData = newSizeOfRawData;
842  }
843 
844  static const std::size_t size()
845  {
846  return sizeof(PELIB_IMAGE_SECTION_HEADER);
847  }
848 
849  std::string sectionName;
850  };
851 
853  {
854  std::uint64_t Ordinal;
855 
857  {
858  Ordinal = 0;
859  }
860  };
861 
863  {
864  std::uint32_t OriginalFirstThunk;
865  std::uint32_t TimeDateStamp;
866  std::uint32_t ForwarderChain;
867  std::uint32_t Name;
868  std::uint32_t FirstThunk;
869 
871  {
872  OriginalFirstThunk = 0;
873  TimeDateStamp = 0;
874  ForwarderChain = 0;
875  Name = 0;
876  FirstThunk = 0;
877  }
878 
879  static inline std::size_t size() {return 20;}
880  };
881 
883  {
884  std::uint32_t Characteristics;
885  std::uint32_t TimeDateStamp;
886  std::uint16_t MajorVersion;
887  std::uint16_t MinorVersion;
888  std::uint32_t Name;
889  std::uint32_t Base;
890  std::uint32_t NumberOfFunctions;
891  std::uint32_t NumberOfNames;
892  std::uint32_t AddressOfFunctions;
893  std::uint32_t AddressOfNames;
894  std::uint32_t AddressOfNameOrdinals;
895 
897  {
898  Characteristics = 0;
899  TimeDateStamp = 0;
900  MajorVersion = 0;
901  MinorVersion = 0;
902  Name = 0;
903  Base = 0;
904  NumberOfFunctions = 0;
905  NumberOfNames = 0;
906  AddressOfFunctions = 0;
907  AddressOfNames = 0;
909  }
910 
911  static inline std::size_t size()
912  {
913  return sizeof(PELIB_IMAGE_EXPORT_DIRECTORY);
914  }
915  };
916 
918  {
919  std::uint32_t TimeDateStamp;
920  std::uint16_t OffsetModuleName;
922 
924  {
925  TimeDateStamp = 0;
926  OffsetModuleName = 0;
928  }
929 
930  static inline std::size_t size()
931  {
932  return 8;
933  }
934  };
935 
936  // Stores all necessary information about a BoundImport field.
938  {
940  std::string strModuleName;
941  std::vector<PELIB_IMAGE_BOUND_DIRECTORY> moduleForwarders;
942 
943  // Will be used in std::find_if
944  // Passing by-reference not possible (see C++ Standard Core Language Defect Reports, Revision 29, Issue 106)
946  bool equal(const std::string strModuleName2) const;
947 
948  std::size_t size() const;
949  };
950 
952  {
953  std::uint32_t addroffunc;
954  std::uint32_t addrofname;
955  std::uint16_t ordinal;
956  std::string funcname;
957 
959 
960  bool equal(const std::string strFunctionName) const;
961  inline unsigned int size() const
962  {
963  unsigned int uiSize = 4;
964  if (addroffunc) uiSize += 2;// + 4;
965  if (!funcname.empty())
966  uiSize = (unsigned int)(uiSize + 4 + funcname.size() + 1);
967  return uiSize;
968  }
969  };
970 
972  {
973  std::uint32_t Characteristics;
974  std::uint32_t TimeDateStamp;
975  std::uint16_t MajorVersion;
976  std::uint16_t MinorVersion;
977  std::uint16_t NumberOfNamedEntries;
978  std::uint16_t NumberOfIdEntries;
979 
981 
982  static inline std::size_t size() {return 16;}
983  };
984 
986  {
987  std::uint32_t Name;
988  std::uint32_t OffsetToData;
989 
991 
992  static inline std::size_t size() {return 8;}
993  };
994 
995  const unsigned int PELIB_IMAGE_SIZEOF_BASE_RELOCATION = 8;
996 
998  {
1000  std::string wstrName;
1001 
1002  bool operator<(const PELIB_IMG_RES_DIR_ENTRY& first) const;
1003 
1004  };
1005 
1007  {
1008  std::uint32_t VirtualAddress;
1009  std::uint32_t SizeOfBlock;
1010 
1012  {
1013  VirtualAddress = 0;
1014  SizeOfBlock = 0;
1015  }
1016 
1017  static inline std::size_t size() {return 72;}
1018  };
1019 
1021  {
1022  std::uint32_t cb;
1023  std::uint16_t MajorRuntimeVersion;
1024  std::uint16_t MinorRuntimeVersion;
1026  std::uint32_t Flags;
1027  std::uint32_t EntryPointToken;
1034 
1036  static inline std::size_t size() {return 72;}
1037  };
1038 
1039  // Used to store a file's export table.
1041  {
1045  std::string name;
1046  std::vector<PELIB_EXP_FUNC_INFORMATION> functions;
1047 
1048  inline std::size_t size() const
1049  {
1050  return (PELIB_IMAGE_EXPORT_DIRECTORY::size() + name.size() + 1 +
1051  std::accumulate(functions.begin(), functions.end(), 0, accumulate<PELIB_EXP_FUNC_INFORMATION>));
1052  }
1053  };
1054 
1055  bool isEqualNc(const std::string& s1, const std::string& s2);
1056 
1057  // Used for parsing a file's import table. It combines the function name, the hint
1058  // and the IMAGE_THUNK_DATA of an imported function.
1060  {
1064  std::uint16_t hint;
1066  std::string fname;
1067 
1069  {
1070  hint = 0;
1071  }
1072 
1073  bool equalHint(std::uint16_t wHint) const
1074  {
1075  return hint == wHint;
1076 // return itd.Ordinal == (wHint | PELIB_IMAGE_ORDINAL_FLAGS<bits>::PELIB_IMAGE_ORDINAL_FLAG);
1077  }
1078 
1079  bool equalFunctionName(std::string strFunctionName) const
1080  {
1081  return isEqualNc(fname, strFunctionName);
1082  }
1083 
1084  std::uint32_t calculateSize(std::uint32_t pointerSize) const
1085  {
1086  return pointerSize + fname.size() + 1 + sizeof(hint);
1087  }
1088  };
1089 
1091  {
1092  std::uint64_t address;
1093  std::uint16_t hint;
1094  std::string fname;
1095 
1097  {
1098 
1099  }
1100  };
1101 
1102  // Used to store a file's import table. Every struct of this sort
1103  // can store import information of one DLL.
1105  {
1109  std::string name;
1111  std::vector<PELIB_THUNK_DATA> originalfirstthunk;
1113  std::vector<PELIB_THUNK_DATA> firstthunk;
1114 
1115  inline std::uint32_t calculateSize(std::uint32_t pointerSize) const
1116  {
1117  std::uint32_t totalSize = sizeof(PELIB_IMAGE_IMPORT_DESCRIPTOR) + name.size() + 1; // descriptor + dllname
1118 
1119  for(const auto & element : originalfirstthunk)
1120  totalSize += element.calculateSize(pointerSize);
1121  return totalSize + pointerSize; // Add zero-termination
1122  }
1123 
1124  bool operator==(std::string strFilename) const
1125  {
1126  return isEqualNc(this->name, strFilename);
1127  }
1128  };
1129 
1130  const std::size_t IMPORT_LIBRARY_MAX_LENGTH = 96;
1131  const std::size_t IMPORT_SYMBOL_MAX_LENGTH = 96;
1132 
1134  {
1135  std::uint32_t OffsetToData;
1136  std::uint32_t Size;
1137  std::uint32_t CodePage;
1138  std::uint32_t Reserved;
1139 
1140  static inline unsigned int size() {return 16;}
1141 
1143  };
1144 
1146  {
1148  std::vector<std::uint8_t> vData;
1149  };
1150 
1152  {
1154  std::vector<std::uint16_t> vRelocData;
1155  };
1156 
1158  {
1159  std::uint32_t Characteristics;
1160  std::uint32_t TimeDateStamp;
1161  std::uint16_t MajorVersion;
1162  std::uint16_t MinorVersion;
1163  std::uint32_t Type;
1164  std::uint32_t SizeOfData;
1165  std::uint32_t AddressOfRawData;
1166  std::uint32_t PointerToRawData;
1167 
1168  static std::size_t size() {return 28;}
1169 
1171  };
1172 
1174  {
1176  std::vector<std::uint8_t> data;
1177  };
1178 
1180  {
1181  std::uint32_t StartAddressOfRawData;
1182  std::uint32_t EndAddressOfRawData;
1183  std::uint32_t AddressOfIndex;
1184  std::uint32_t AddressOfCallBacks;
1185  std::uint32_t SizeOfZeroFill;
1186  std::uint32_t Characteristics;
1187  };
1188 
1190  {
1191  std::uint64_t StartAddressOfRawData;
1192  std::uint64_t EndAddressOfRawData;
1193  std::uint64_t AddressOfIndex;
1194  std::uint64_t AddressOfCallBacks;
1195  std::uint32_t SizeOfZeroFill;
1196  std::uint32_t Characteristics;
1197 
1199  {
1201  EndAddressOfRawData = 0;
1202  AddressOfIndex = 0;
1203  AddressOfCallBacks = 0;
1204  SizeOfZeroFill = 0;
1205  Characteristics = 0;
1206  }
1207  };
1208 
1209  std::uint32_t BytesToPages(std::uint32_t ByteSize);
1210  std::uint32_t AlignToSize(std::uint32_t ByteSize, std::uint32_t AlignSize);
1211 
1212  std::uint64_t fileSize(const std::string& filename);
1213  std::uint64_t fileSize(std::istream& stream);
1214  std::uint64_t fileSize(std::ofstream& file);
1215  std::uint64_t fileSize(std::fstream& file);
1216  unsigned int alignOffset(unsigned int uiOffset, unsigned int uiAlignment);
1217  std::size_t getStringFromFileOffset(
1218  std::istream &stream,
1219  std::string &result,
1220  std::size_t fileOffset,
1221  std::size_t maxLength = 0,
1222  bool isPrintable = false,
1223  bool isNotTooLong = false);
1224 
1225  const char * getLoaderErrorString(LoaderError ldrError, bool userFriendly = false);
1227 
1228  /* enum MzHeader_Field {e_magic, e_cblp, e_cp, e_crlc, e_cparhdr, e_minalloc, e_maxalloc,
1229  e_ss, e_sp, e_csum, e_ip, e_cs, e_lfarlc, e_ovno, e_res, e_oemid,
1230  e_oeminfo, e_res2, e_lfanew};
1231  enum PeHeader_Field {NtSignature, Machine, NumberOfSections, TimeDateStamp, PointerToSymbolTable,
1232  NumberOfSymbols, SizeOfOptionalHeader, Characteristics, Magic,
1233  MajorLinkerVersion, MinorLinkerVersion, SizeOfCode, SizeOfInitializedData,
1234  SizeOfUninitializedData, AddressOfEntryPoint, BaseOfCode, BaseOfData, ImageBase,
1235  SectionAlignment, FileAlignment, MajorOperatingSystemVersion, MinorOperatingSystemVersion,
1236  MajorImageVersion, MinorImageVersion, MajorSubsystemVersion, MinorSubsystemVersion,
1237  Win32VersionValue, SizeOfImage, SizeOfHeaders, CheckSum, Subsystem, DllCharacteristics,
1238  SizeOfStackReserve, SizeOfStackCommit, SizeOfHeapReserve, SizeOfHeapCommit,
1239  LoaderFlags, NumberOfRvaAndSizes, DataDirectoryRva, DataDirectorySize};
1240  enum Section_Field {SectionName, VirtualSize, VirtualAddress, SizeOfRawData, PointerToRawData, PointerToRelocations,
1241  PointerToLinenumbers, NumberOfRelocations, NumberOfLinenumbers, SectionCharacteristics};
1242 */
1243 
1244  const unsigned int PELIB_IMAGE_SIZEOF_COFF_SYMBOL = 18;
1245  const std::size_t COFF_SYMBOL_NAME_MAX_LENGTH = 96;
1246 
1248  {
1249  std::uint32_t Index;
1250  std::string Name;
1251  std::uint32_t Value;
1252  std::uint16_t SectionNumber;
1253  std::uint8_t TypeComplex;
1254  std::uint8_t TypeSimple;
1255  std::uint8_t StorageClass;
1256  std::uint8_t NumberOfAuxSymbols;
1257 
1260  {
1261 
1262  }
1263  };
1264 
1266  {
1267  std::string Signature;
1268  std::uint16_t ProductId;
1269  std::uint16_t ProductBuild;
1270  std::uint32_t Count;
1271  std::string ProductName;
1272  std::string VisualStudioName;
1273 
1275  {
1276 
1277  }
1278  };
1279 
1281  {
1282  std::uint16_t Flags; // Flags to indicate if CI information is available, etc.
1283  std::uint16_t Catalog; // 0xFFFF means not available
1284  std::uint32_t CatalogOffset;
1285  std::uint32_t Reserved; // Additional bitmask to be defined later
1286  };
1287 
1288  // Load config directory
1290  {
1291  std::uint32_t Size;
1292  std::uint32_t TimeDateStamp;
1293  std::uint16_t MajorVersion;
1294  std::uint16_t MinorVersion;
1295  std::uint32_t GlobalFlagsClear;
1296  std::uint32_t GlobalFlagsSet;
1300  std::uint32_t LockPrefixTable;
1301  std::uint32_t MaximumAllocationSize;
1302  std::uint32_t VirtualMemoryThreshold;
1303  std::uint32_t ProcessHeapFlags;
1304  std::uint32_t ProcessAffinityMask;
1305  std::uint16_t CSDVersion;
1306  std::uint16_t DependentLoadFlags;
1307  std::uint32_t EditList;
1308  std::uint32_t SecurityCookie;
1309  std::uint32_t SEHandlerTable;
1310  std::uint32_t SEHandlerCount;
1313  std::uint32_t GuardCFFunctionTable;
1314  std::uint32_t GuardCFFunctionCount;
1315  std::uint32_t GuardFlags;
1321  std::uint32_t DynamicValueRelocTable;
1322  std::uint32_t CHPEMetadataPointer;
1323  std::uint32_t GuardRFFailureRoutine;
1327  std::uint16_t Reserved2;
1329  std::uint32_t HotPatchTableOffset;
1330  std::uint32_t Reserved3;
1335  };
1336 
1338  {
1339  std::uint32_t Size;
1340  std::uint32_t TimeDateStamp;
1341  std::uint16_t MajorVersion;
1342  std::uint16_t MinorVersion;
1343  std::uint32_t GlobalFlagsClear;
1344  std::uint32_t GlobalFlagsSet;
1348  std::uint64_t LockPrefixTable;
1349  std::uint64_t MaximumAllocationSize;
1350  std::uint64_t VirtualMemoryThreshold;
1351  std::uint64_t ProcessAffinityMask;
1352  std::uint32_t ProcessHeapFlags;
1353  std::uint16_t CSDVersion;
1354  std::uint16_t DependentLoadFlags;
1355  std::uint64_t EditList;
1356  std::uint64_t SecurityCookie;
1357  std::uint64_t SEHandlerTable;
1358  std::uint64_t SEHandlerCount;
1361  std::uint64_t GuardCFFunctionTable;
1362  std::uint64_t GuardCFFunctionCount;
1363  std::uint32_t GuardFlags;
1369  std::uint64_t DynamicValueRelocTable;
1370  std::uint64_t CHPEMetadataPointer;
1371  std::uint64_t GuardRFFailureRoutine;
1375  std::uint16_t Reserved2;
1377  std::uint32_t HotPatchTableOffset;
1378  std::uint32_t Reserved3;
1383  };
1384 
1385  // This structure is defined in the "delayimp.h" header file as ImgDelayDescrV1 or ImgDelayDescrV2.
1386  // Fields suffixed with "Rva" are direct virtual addresses in the "V1" version of the structure.
1388  {
1389  std::uint32_t Attributes; // Attributes. See PELIB_DELAY_ATTRIBUTE_XXX for more info
1390  std::uint32_t NameRva; // RVA to dll name
1391  std::uint32_t ModuleHandleRva; // RVA of module handle
1392  std::uint32_t DelayImportAddressTableRva; // RVA of the IAT
1393  std::uint32_t DelayImportNameTableRva; // RVA of the INT
1394  std::uint32_t BoundDelayImportTableRva; // RVA of the optional bound IAT
1395  std::uint32_t UnloadDelayImportTableRva; // RVA of optional copy of original IAT
1396  std::uint32_t TimeStamp; // 0 if not bound, O.W. date/time stamp of DLL bound to (Old BIND)
1397  };
1398 
1399  const std::uint32_t PELIB_DELAY_ATTRIBUTE_V2 = 0x01; // If this bit is set, then the structure is version 2
1400 
1402  {
1403  private:
1404  typedef typename std::vector<PELIB_DELAY_IMPORT>::const_iterator DelayImportIterator;
1406  std::vector<PELIB_DELAY_IMPORT> Functions;
1407 
1408  public:
1410  std::string Name;
1411 
1413  {
1414  init();
1415  }
1416 
1418  {
1419 
1420  }
1421 
1422  void init()
1423  {
1424  memset(&delayedImport, 0, sizeof(PELIB_IMAGE_DELAY_LOAD_DESCRIPTOR));
1425  hasOrdinalNumbers = false;
1426  Functions.clear();
1427  Name.clear();
1428  }
1429 
1430  void addFunction(const PELIB_DELAY_IMPORT &function)
1431  {
1432  Functions.push_back(function);
1433  if(function.hint)
1434  {
1435  hasOrdinalNumbers = true;
1436  }
1437  }
1438 
1440  {
1441  return hasOrdinalNumbers;
1442  }
1443 
1445  {
1446  return Functions.size();
1447  }
1448 
1449  const PELIB_DELAY_IMPORT *getFunction(std::size_t index) const
1450  {
1451  return index < getNumberOfFunctions() ? &Functions[index] : nullptr;
1452  }
1453 
1454  PELIB_DELAY_IMPORT *getFunction(std::size_t index)
1455  {
1456  return index < getNumberOfFunctions() ? &Functions[index] : nullptr;
1457  }
1458 
1460  {
1461  return Functions.begin();
1462  }
1463 
1465  {
1466  return Functions.begin();
1467  }
1468 
1469  const DelayImportIterator end() const
1470  {
1471  return Functions.end();
1472  }
1473 
1475  {
1476  return Functions.end();
1477  }
1478  };
1479 
1480  enum
1481  {
1484  };
1485 
1486  enum
1487  {
1492  };
1493 
1495  {
1496  std::uint32_t Length;
1497  std::uint16_t Revision;
1498  std::uint16_t CertificateType;
1499  std::vector<unsigned char> Certificate;
1500 
1501  static inline unsigned int size() { return 8; }
1502  };
1503 }
1504 
1506 {
1507  public:
1508  IStreamWrapper(std::istream& stream) :
1509  _stream(stream)
1510  {
1511  _pos = _stream.tellg();
1512  _state = _stream.rdstate();
1513  _stream.clear();
1514  }
1515 
1517  {
1518  _stream.setstate(_state);
1519  _stream.seekg(_pos, std::ios::beg);
1520  }
1521 
1522  operator std::istream&() const
1523  {
1524  return _stream;
1525  }
1526  std::istream& getIstream()
1527  {
1528  return _stream;
1529  }
1530 
1531  // Needed wrapped methods.
1532  //
1533  explicit operator bool() const
1534  {
1535  return static_cast<bool>(_stream);
1536  }
1537 
1538  IStreamWrapper& seekg(std::streampos pos)
1539  {
1540  _stream.seekg(pos);
1541  return *this;
1542  }
1543 
1544  IStreamWrapper& seekg(std::streamoff off, std::ios_base::seekdir way)
1545  {
1546  _stream.seekg(off, way);
1547  return *this;
1548  }
1549 
1550  std::streampos tellg()
1551  {
1552  return _stream.tellg();
1553  }
1554 
1555  IStreamWrapper& read(char* s, std::streamsize n)
1556  {
1557  _stream.read(s, n);
1558  return *this;
1559  }
1560 
1561  std::streamsize gcount() const
1562  {
1563  return _stream.gcount();
1564  }
1565 
1566  void clear(std::ios_base::iostate state = std::ios_base::goodbit)
1567  {
1568  return _stream.clear(state);
1569  }
1570 
1571  private:
1572  std::istream& _stream;
1573  std::streampos _pos;
1574  std::ios::iostate _state;
1575 };
1576 
1577 #endif
Definition: PeLibAux.h:1506
~IStreamWrapper()
Definition: PeLibAux.h:1516
std::streampos _pos
Definition: PeLibAux.h:1573
std::istream & getIstream()
Definition: PeLibAux.h:1526
std::streamsize gcount() const
Definition: PeLibAux.h:1561
IStreamWrapper & seekg(std::streamoff off, std::ios_base::seekdir way)
Definition: PeLibAux.h:1544
IStreamWrapper & seekg(std::streampos pos)
Definition: PeLibAux.h:1538
std::streampos tellg()
Definition: PeLibAux.h:1550
void clear(std::ios_base::iostate state=std::ios_base::goodbit)
Definition: PeLibAux.h:1566
IStreamWrapper & read(char *s, std::streamsize n)
Definition: PeLibAux.h:1555
std::istream & _stream
Definition: PeLibAux.h:1572
std::ios::iostate _state
Definition: PeLibAux.h:1574
IStreamWrapper(std::istream &stream)
Definition: PeLibAux.h:1508
imageFileMachineIterator begin() const
Definition: PeLibAux.cpp:112
const std::vector< PELIB_IMAGE_FILE_MACHINE > all
Definition: PeLibAux.h:506
bool isValidMachineCode(PELIB_IMAGE_FILE_MACHINE value) const
Definition: PeLibAux.cpp:107
~PELIB_IMAGE_FILE_MACHINE_ITERATOR()
Definition: PeLibAux.cpp:102
imageFileMachineIterator end() const
Definition: PeLibAux.cpp:117
std::vector< PELIB_IMAGE_FILE_MACHINE >::const_iterator imageFileMachineIterator
Definition: PeLibAux.h:504
PELIB_IMAGE_FILE_MACHINE_ITERATOR()
Definition: PeLibAux.cpp:97
Definition: PeFile.h:38
Definition: BoundImportDirectory.h:21
@ PELIB_IMAGE_FILE_DEBUG_STRIPPED
Definition: PeLibAux.h:288
@ PELIB_IMAGE_FILE_LINE_NUMS_STRIPPED
Definition: PeLibAux.h:282
@ PELIB_IMAGE_FILE_DLL
Definition: PeLibAux.h:292
@ PELIB_IMAGE_FILE_EXECUTABLE_IMAGE
Definition: PeLibAux.h:281
@ PELIB_IMAGE_FILE_SYSTEM
Definition: PeLibAux.h:291
@ PELIB_IMAGE_FILE_NET_RUN_FROM_SWAP
Definition: PeLibAux.h:290
@ PELIB_IMAGE_FILE_BYTES_REVERSED_HI
Definition: PeLibAux.h:294
@ PELIB_IMAGE_FILE_LARGE_ADDRESS_AWARE
Definition: PeLibAux.h:285
@ PELIB_IMAGE_FILE_BYTES_REVERSED_LO
Definition: PeLibAux.h:286
@ PELIB_IMAGE_FILE_UP_SYSTEM_ONLY
Definition: PeLibAux.h:293
@ PELIB_IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
Definition: PeLibAux.h:289
@ PELIB_IMAGE_FILE_LOCAL_SYMS_STRIPPED
Definition: PeLibAux.h:283
@ PELIB_IMAGE_FILE_RELOCS_STRIPPED
Definition: PeLibAux.h:280
@ PELIB_IMAGE_FILE_AGGRESSIVE_WS_TRIM
Definition: PeLibAux.h:284
@ PELIB_IMAGE_FILE_32BIT_MACHINE
Definition: PeLibAux.h:287
bool getLoaderErrorLoadableAnyway(LoaderError ldrError)
Definition: PeLibAux.cpp:188
std::uint32_t AlignToSize(std::uint32_t ByteSize, std::uint32_t AlignSize)
Definition: PeLibAux.cpp:128
@ PELIB_IMAGE_REL_BASED_HIGHLOW
Definition: PeLibAux.h:335
@ PELIB_IMAGE_REL_BASED_LOW
Definition: PeLibAux.h:334
@ PELIB_IMAGE_REL_BASED_ABSOLUTE
Definition: PeLibAux.h:332
@ PELIB_IMAGE_REL_BASED_DIR64
Definition: PeLibAux.h:339
@ PELIB_IMAGE_REL_BASED_HIGHADJ
Definition: PeLibAux.h:336
@ PELIB_IMAGE_REL_BASED_HIGH
Definition: PeLibAux.h:333
@ PELIB_IMAGE_REL_BASED_IA64_IMM64
Definition: PeLibAux.h:338
@ PELIB_IMAGE_REL_BASED_MIPS_JMPADDR
Definition: PeLibAux.h:337
@ PELIB_IMAGE_NT_OPTIONAL_HDR64_MAGIC
Definition: PeLibAux.h:314
@ PELIB_IMAGE_NT_OPTIONAL_HDR32_MAGIC
Definition: PeLibAux.h:313
@ PELIB_IMAGE_ROM_OPTIONAL_HDR_MAGIC
Definition: PeLibAux.h:315
unsigned int accumulate(unsigned int size, const T &v)
Definition: PeLibAux.h:496
@ PELIB_IMAGE_DIRECTORY_ENTRY_RESOURCE
Definition: PeLibAux.h:171
@ PELIB_IMAGE_DIRECTORY_ENTRY_BASERELOC
Definition: PeLibAux.h:174
@ PELIB_IMAGE_DIRECTORY_ENTRY_TLS
Definition: PeLibAux.h:178
@ PELIB_IMAGE_DIRECTORY_ENTRY_GLOBALPTR
Definition: PeLibAux.h:177
@ PELIB_IMAGE_DIRECTORY_ENTRY_IAT
Definition: PeLibAux.h:181
@ PELIB_IMAGE_DIRECTORY_ENTRY_ARCHITECTURE
Definition: PeLibAux.h:176
@ PELIB_IMAGE_DIRECTORY_ENTRY_IMPORT
Definition: PeLibAux.h:170
@ PELIB_IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR
Definition: PeLibAux.h:183
@ PELIB_IMAGE_DIRECTORY_ENTRY_SECURITY
Definition: PeLibAux.h:173
@ PELIB_IMAGE_DIRECTORY_ENTRY_DEBUG
Definition: PeLibAux.h:175
@ PELIB_IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG
Definition: PeLibAux.h:179
@ PELIB_IMAGE_DIRECTORY_ENTRY_EXCEPTION
Definition: PeLibAux.h:172
@ PELIB_IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
Definition: PeLibAux.h:180
@ PELIB_IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT
Definition: PeLibAux.h:182
@ PELIB_IMAGE_DIRECTORY_ENTRY_EXPORT
Definition: PeLibAux.h:169
LoaderError
Definition: PeLibAux.h:47
@ LDR_ERROR_SECTION_ALIGNMENT_NOT_POW2
Definition: PeLibAux.h:62
@ LDR_ERROR_DIGITAL_SIGNATURE_ZEROED
Definition: PeLibAux.h:104
@ LDR_ERROR_INVALID_SECTION_VA
Definition: PeLibAux.h:77
@ LDR_ERROR_RAW_DATA_OVERFLOW
Definition: PeLibAux.h:73
@ LDR_ERROR_INVALID_SECTION_VSIZE
Definition: PeLibAux.h:78
@ LDR_ERROR_SIZE_OF_IMAGE_ZERO
Definition: PeLibAux.h:70
@ LDR_ERROR_INVALID_MACHINE64
Definition: PeLibAux.h:67
@ LDR_ERROR_ENTRY_POINT_ZEROED
Definition: PeLibAux.h:100
@ LDR_ERROR_RSRC_OVER_END_OF_IMAGE
Definition: PeLibAux.h:93
@ LDR_ERROR_RELOC_ENTRY_BAD_TYPE
Definition: PeLibAux.h:110
@ LDR_ERROR_INMEMORY_IMAGE
Definition: PeLibAux.h:113
@ LDR_ERROR_FILE_ALIGNMENT_NOT_POW2
Definition: PeLibAux.h:60
@ LDR_ERROR_SECTION_HEADERS_OVERFLOW
Definition: PeLibAux.h:75
@ LDR_ERROR_NO_OPTHDR_MAGIC
Definition: PeLibAux.h:57
@ LDR_ERROR_IMPDIR_OUT_OF_FILE
Definition: PeLibAux.h:85
@ LDR_ERROR_SECTION_ALIGNMENT_INVALID
Definition: PeLibAux.h:64
@ LDR_ERROR_FILE_IS_CUT_LOADABLE
Definition: PeLibAux.h:82
@ LDR_ERROR_ENTRY_POINT_OUT_OF_IMAGE
Definition: PeLibAux.h:99
@ LDR_ERROR_IMPDIR_COUNT_EXCEEDED
Definition: PeLibAux.h:87
@ LDR_ERROR_RSRC_SUBDIR_OUT_OF_IMAGE
Definition: PeLibAux.h:96
@ LDR_ERROR_INVALID_MACHINE32
Definition: PeLibAux.h:66
@ LDR_ERROR_FILE_HEADER_INVALID
Definition: PeLibAux.h:55
@ LDR_ERROR_IMAGE_NON_EXECUTABLE
Definition: PeLibAux.h:56
@ LDR_ERROR_MAX
Definition: PeLibAux.h:115
@ LDR_ERROR_SIZE_OF_OPTHDR_NOT_ALIGNED
Definition: PeLibAux.h:69
@ LDR_ERROR_FILE_IS_CUT
Definition: PeLibAux.h:81
@ LDR_ERROR_IMPDIR_IMPORT_COUNT_EXCEEDED
Definition: PeLibAux.h:90
@ LDR_ERROR_IMPDIR_CUT
Definition: PeLibAux.h:86
@ LDR_ERROR_DIGITAL_SIGNATURE_CUT
Definition: PeLibAux.h:103
@ LDR_ERROR_NTHEADER_OFFSET_OVERFLOW
Definition: PeLibAux.h:52
@ LDR_ERROR_INVALID_SECTION_RAWSIZE
Definition: PeLibAux.h:79
@ LDR_ERROR_SECTION_SIZE_MISMATCH
Definition: PeLibAux.h:76
@ LDR_ERROR_SIZE_OF_IMAGE_TOO_BIG
Definition: PeLibAux.h:65
@ LDR_ERROR_SECTION_ALIGNMENT_TOO_SMALL
Definition: PeLibAux.h:63
@ LDR_ERROR_RELOCATIONS_OUT_OF_IMAGE
Definition: PeLibAux.h:107
@ LDR_ERROR_SIZE_OF_HEADERS_INVALID
Definition: PeLibAux.h:68
@ LDR_ERROR_SECTION_HEADERS_OUT_OF_IMAGE
Definition: PeLibAux.h:74
@ LDR_ERROR_IMPDIR_THUNK_RVA_INVALID
Definition: PeLibAux.h:89
@ LDR_ERROR_IMPDIR_NAME_RVA_INVALID
Definition: PeLibAux.h:88
@ LDR_ERROR_SECTION_ALIGNMENT_ZERO
Definition: PeLibAux.h:61
@ LDR_ERROR_FILE_ALIGNMENT_ZERO
Definition: PeLibAux.h:59
@ LDR_ERROR_NONE
Definition: PeLibAux.h:48
@ LDR_ERROR_RELOC_BLOCK_INVALID_LENGTH
Definition: PeLibAux.h:109
@ LDR_ERROR_FILE_TOO_BIG
Definition: PeLibAux.h:49
@ LDR_ERROR_SIZE_OF_HEADERS_ZERO
Definition: PeLibAux.h:58
@ LDR_ERROR_RSRC_NAME_OUT_OF_IMAGE
Definition: PeLibAux.h:94
@ LDR_ERROR_E_LFANEW_OUT_OF_FILE
Definition: PeLibAux.h:51
@ LDR_ERROR_IMAGE_BASE_NOT_ALIGNED
Definition: PeLibAux.h:71
@ LDR_ERROR_INVALID_SIZE_OF_IMAGE
Definition: PeLibAux.h:80
@ LDR_ERROR_NTHEADER_OUT_OF_FILE
Definition: PeLibAux.h:53
@ LDR_ERROR_SIZE_OF_IMAGE_PTES_ZERO
Definition: PeLibAux.h:72
@ LDR_ERROR_RSRC_DATA_OUT_OF_IMAGE
Definition: PeLibAux.h:95
@ LDR_ERROR_RELOC_BLOCK_INVALID_VA
Definition: PeLibAux.h:108
@ LDR_ERROR_NO_NT_SIGNATURE
Definition: PeLibAux.h:54
@ LDR_ERROR_E_LFANEW_UNALIGNED
Definition: PeLibAux.h:50
const std::uint32_t PELIB_IMAGE_NUMBEROF_DIRECTORY_ENTRIES
Definition: PeLibAux.h:160
@ PELIB_LANG_CROATIAN
Definition: PeLibAux.h:396
@ PELIB_LANG_SORBIAN
Definition: PeLibAux.h:417
@ PELIB_LANG_KINYARWANDA
Definition: PeLibAux.h:489
@ PELIB_LANG_JAPANESE
Definition: PeLibAux.h:388
@ PELIB_LANG_PERSIAN
Definition: PeLibAux.h:412
@ PELIB_LANG_UPPER_SORBIAN
Definition: PeLibAux.h:419
@ PELIB_LANG_IGBO
Definition: PeLibAux.h:475
@ PELIB_LANG_BULGARIAN
Definition: PeLibAux.h:373
@ PELIB_LANG_BASHKIR
Definition: PeLibAux.h:472
@ PELIB_LANG_BASQUE
Definition: PeLibAux.h:416
@ PELIB_LANG_GREEK
Definition: PeLibAux.h:379
@ PELIB_LANG_SOTHO
Definition: PeLibAux.h:471
@ PELIB_LANG_RUSSIAN
Definition: PeLibAux.h:395
@ PELIB_LANG_SINDHI
Definition: PeLibAux.h:456
@ PELIB_LANG_NORWEGIAN
Definition: PeLibAux.h:391
@ PELIB_LANG_BELARUSIAN
Definition: PeLibAux.h:407
@ PELIB_LANG_YI
Definition: PeLibAux.h:477
@ PELIB_LANG_MAPUDUNGUN
Definition: PeLibAux.h:478
@ PELIB_LANG_IRISH
Definition: PeLibAux.h:430
@ PELIB_LANG_OCCITAN
Definition: PeLibAux.h:484
@ PELIB_LANG_QUECHUA
Definition: PeLibAux.h:470
@ PELIB_LANG_BOSNIAN_NEUTRAL
Definition: PeLibAux.h:398
@ PELIB_LANG_TIBETAN
Definition: PeLibAux.h:449
@ PELIB_LANG_VIETNAMESE
Definition: PeLibAux.h:413
@ PELIB_LANG_KANNADA
Definition: PeLibAux.h:443
@ PELIB_LANG_GUJARATI
Definition: PeLibAux.h:439
@ PELIB_LANG_THAI
Definition: PeLibAux.h:402
@ PELIB_LANG_SINHALESE
Definition: PeLibAux.h:458
@ PELIB_LANG_MALAY
Definition: PeLibAux.h:431
@ PELIB_LANG_SPANISH
Definition: PeLibAux.h:381
@ PELIB_LANG_KASHMIRI
Definition: PeLibAux.h:462
@ PELIB_LANG_KOREAN
Definition: PeLibAux.h:389
@ PELIB_LANG_ROMANIAN
Definition: PeLibAux.h:394
@ PELIB_LANG_CZECH
Definition: PeLibAux.h:376
@ PELIB_LANG_INVARIANT
Definition: PeLibAux.h:481
@ PELIB_LANG_KHMER
Definition: PeLibAux.h:451
@ PELIB_LANG_DARI
Definition: PeLibAux.h:491
@ PELIB_LANG_KAZAK
Definition: PeLibAux.h:432
@ PELIB_LANG_ARMENIAN
Definition: PeLibAux.h:414
@ PELIB_LANG_TIGRIGNA
Definition: PeLibAux.h:476
@ PELIB_LANG_WELSH
Definition: PeLibAux.h:450
@ PELIB_LANG_WOLOF
Definition: PeLibAux.h:490
@ PELIB_LANG_GEORGIAN
Definition: PeLibAux.h:425
@ PELIB_LANG_UIGHUR
Definition: PeLibAux.h:482
@ PELIB_LANG_GREENLANDIC
Definition: PeLibAux.h:474
@ PELIB_LANG_PORTUGUESE
Definition: PeLibAux.h:393
@ PELIB_LANG_HAUSA
Definition: PeLibAux.h:468
@ PELIB_LANG_HUNGARIAN
Definition: PeLibAux.h:385
@ PELIB_LANG_HEBREW
Definition: PeLibAux.h:384
@ PELIB_LANG_ARABIC
Definition: PeLibAux.h:372
@ PELIB_LANG_LUXEMBOURGISH
Definition: PeLibAux.h:473
@ PELIB_LANG_CHINESE
Definition: PeLibAux.h:375
@ PELIB_LANG_UZBEK
Definition: PeLibAux.h:435
@ PELIB_LANG_FILIPINO
Definition: PeLibAux.h:466
@ PELIB_LANG_DIVEHI
Definition: PeLibAux.h:467
@ PELIB_LANG_FRISIAN
Definition: PeLibAux.h:464
@ PELIB_LANG_TURKISH
Definition: PeLibAux.h:403
@ PELIB_LANG_YAKUT
Definition: PeLibAux.h:487
@ PELIB_LANG_XHOSA
Definition: PeLibAux.h:422
@ PELIB_LANG_MALTESE
Definition: PeLibAux.h:428
@ PELIB_LANG_URDU
Definition: PeLibAux.h:404
@ PELIB_LANG_SLOVAK
Definition: PeLibAux.h:399
@ PELIB_LANG_KONKANI
Definition: PeLibAux.h:454
@ PELIB_LANG_TATAR
Definition: PeLibAux.h:436
@ PELIB_LANG_GALICIAN
Definition: PeLibAux.h:453
@ PELIB_LANG_GERMAN
Definition: PeLibAux.h:378
@ PELIB_LANG_MANIPURI
Definition: PeLibAux.h:455
@ PELIB_LANG_AMHARIC
Definition: PeLibAux.h:460
@ PELIB_LANG_PUNJABI
Definition: PeLibAux.h:438
@ PELIB_LANG_ALBANIAN
Definition: PeLibAux.h:400
@ PELIB_LANG_MAORI
Definition: PeLibAux.h:483
@ PELIB_LANG_SYRIAC
Definition: PeLibAux.h:457
@ PELIB_LANG_ENGLISH
Definition: PeLibAux.h:380
@ PELIB_LANG_UKRAINIAN
Definition: PeLibAux.h:406
@ PELIB_LANG_FAEROESE
Definition: PeLibAux.h:426
@ PELIB_LANG_SANSKRIT
Definition: PeLibAux.h:447
@ PELIB_LANG_ITALIAN
Definition: PeLibAux.h:387
@ PELIB_LANG_ESTONIAN
Definition: PeLibAux.h:409
@ PELIB_LANG_SAMI
Definition: PeLibAux.h:429
@ PELIB_LANG_ORIYA
Definition: PeLibAux.h:440
@ PELIB_LANG_NEUTRAL
Definition: PeLibAux.h:371
@ PELIB_LANG_SWAHILI
Definition: PeLibAux.h:434
@ PELIB_LANG_PASHTO
Definition: PeLibAux.h:465
@ PELIB_LANG_ZULU
Definition: PeLibAux.h:423
@ PELIB_LANG_ALSATIAN
Definition: PeLibAux.h:486
@ PELIB_LANG_INDONESIAN
Definition: PeLibAux.h:405
@ PELIB_LANG_TAMAZIGHT
Definition: PeLibAux.h:461
@ PELIB_LANG_ICELANDIC
Definition: PeLibAux.h:386
@ PELIB_LANG_NEPALI
Definition: PeLibAux.h:463
@ PELIB_LANG_LITHUANIAN
Definition: PeLibAux.h:411
@ PELIB_LANG_TELUGU
Definition: PeLibAux.h:442
@ PELIB_LANG_HINDI
Definition: PeLibAux.h:427
@ PELIB_LANG_LAO
Definition: PeLibAux.h:452
@ PELIB_LANG_MOHAWK
Definition: PeLibAux.h:479
@ PELIB_LANG_AFRIKAANS
Definition: PeLibAux.h:424
@ PELIB_LANG_TAMIL
Definition: PeLibAux.h:441
@ PELIB_LANG_YORUBA
Definition: PeLibAux.h:469
@ PELIB_LANG_BRETON
Definition: PeLibAux.h:480
@ PELIB_LANG_FRENCH
Definition: PeLibAux.h:383
@ PELIB_LANG_KYRGYZ
Definition: PeLibAux.h:433
@ PELIB_LANG_SLOVENIAN
Definition: PeLibAux.h:408
@ PELIB_LANG_LATVIAN
Definition: PeLibAux.h:410
@ PELIB_LANG_MALAGASY
Definition: PeLibAux.h:492
@ PELIB_LANG_MACEDONIAN
Definition: PeLibAux.h:420
@ PELIB_LANG_DANISH
Definition: PeLibAux.h:377
@ PELIB_LANG_SWEDISH
Definition: PeLibAux.h:401
@ PELIB_LANG_SERBIAN_NEUTRAL
Definition: PeLibAux.h:397
@ PELIB_LANG_DUTCH
Definition: PeLibAux.h:390
@ PELIB_LANG_BENGALI
Definition: PeLibAux.h:437
@ PELIB_LANG_FINNISH
Definition: PeLibAux.h:382
@ PELIB_LANG_KICHE
Definition: PeLibAux.h:488
@ PELIB_LANG_AZERI
Definition: PeLibAux.h:415
@ PELIB_LANG_LOWER_SORBIAN
Definition: PeLibAux.h:418
@ PELIB_LANG_ASSAMESE
Definition: PeLibAux.h:445
@ PELIB_LANG_INUKTITUT
Definition: PeLibAux.h:459
@ PELIB_LANG_CORSICAN
Definition: PeLibAux.h:485
@ PELIB_LANG_POLISH
Definition: PeLibAux.h:392
@ PELIB_LANG_MONGOLIAN
Definition: PeLibAux.h:448
@ PELIB_LANG_TSWANA
Definition: PeLibAux.h:421
@ PELIB_LANG_MALAYALAM
Definition: PeLibAux.h:444
@ PELIB_LANG_CATALAN
Definition: PeLibAux.h:374
@ PELIB_LANG_MARATHI
Definition: PeLibAux.h:446
std::uint32_t BytesToPages(std::uint32_t ByteSize)
Definition: PeLibAux.cpp:133
std::size_t getStringFromFileOffset(std::istream &stream, std::string &result, std::size_t fileOffset, std::size_t maxLength=0, bool isPrintable=false, bool isNotTooLong=false)
Definition: PeLibAux.cpp:222
const std::uint32_t PELIB_IMAGE_NT_SIGNATURE
Definition: PeLibAux.h:147
@ PELIB_WIN_CERT_TYPE_TS_STACK_SIGNED
Definition: PeLibAux.h:1491
@ PELIB_WIN_CERT_TYPE_PKCS_SIGNED_DATA
Definition: PeLibAux.h:1489
@ PELIB_WIN_CERT_TYPE_X509
Definition: PeLibAux.h:1488
@ PELIB_WIN_CERT_TYPE_RESERVED_1
Definition: PeLibAux.h:1490
const char * getLoaderErrorString(LoaderError ldrError, bool userFriendly=false)
Definition: PeLibAux.cpp:172
std::vector< std::uint8_t > ByteBuffer
Definition: PeLibAux.h:126
unsigned int alignOffset(unsigned int uiOffset, unsigned int uiAlignment)
Definition: PeLibAux.cpp:122
const std::uint16_t PELIB_IMAGE_DOS_SIGNATURE
Definition: PeLibAux.h:137
const std::uint16_t PELIB_MAX_RESOURCE_ENTRIES
Definition: PeLibAux.h:165
const std::size_t IMPORT_LIBRARY_MAX_LENGTH
Definition: PeLibAux.h:1130
const std::uint32_t PELIB_MAX_IMPORT_DLLS
Definition: PeLibAux.h:152
const std::uint32_t PELIB_SECTOR_SIZE
Definition: PeLibAux.h:158
bool isEqualNc(const std::string &s1, const std::string &s2)
Definition: PeLibAux.cpp:271
@ PELIB_IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE
Definition: PeLibAux.h:308
@ PELIB_IMAGE_DLLCHARACTERISTICS_GUARD_CF
Definition: PeLibAux.h:307
@ PELIB_IMAGE_DLLCHARACTERISTICS_NX_COMPAT
Definition: PeLibAux.h:301
@ PELIB_IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
Definition: PeLibAux.h:299
@ PELIB_IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY
Definition: PeLibAux.h:300
@ PELIB_IMAGE_DLLCHARACTERISTICS_NO_BIND
Definition: PeLibAux.h:304
@ PELIB_IMAGE_DLLCHARACTERISTICS_NO_SEH
Definition: PeLibAux.h:303
@ PELIB_IMAGE_DLLCHARACTERISTICS_NO_ISOLATION
Definition: PeLibAux.h:302
@ PELIB_IMAGE_DLLCHARACTERISTICS_APPCONTAINER
Definition: PeLibAux.h:305
@ PELIB_IMAGE_DLLCHARACTERISTICS_WDM_DRIVER
Definition: PeLibAux.h:306
const unsigned int PELIB_IMAGE_SIZEOF_BASE_RELOCATION
Definition: PeLibAux.h:995
PELIB_IMAGE_FILE_MACHINE
Definition: PeLibAux.h:240
@ PELIB_IMAGE_FILE_MACHINE_POWERPC
Definition: PeLibAux.h:260
@ PELIB_IMAGE_FILE_MACHINE_IA64
Definition: PeLibAux.h:262
@ PELIB_IMAGE_FILE_MACHINE_R3000_LITTLE
Definition: PeLibAux.h:246
@ PELIB_IMAGE_FILE_MACHINE_POWERPCFP
Definition: PeLibAux.h:261
@ PELIB_IMAGE_FILE_MACHINE_EBC
Definition: PeLibAux.h:271
@ PELIB_IMAGE_FILE_MACHINE_ARM
Definition: PeLibAux.h:256
@ PELIB_IMAGE_FILE_MACHINE_MIPSFPU
Definition: PeLibAux.h:268
@ PELIB_IMAGE_FILE_MACHINE_AM33
Definition: PeLibAux.h:259
@ PELIB_IMAGE_FILE_MACHINE_SH3DSP
Definition: PeLibAux.h:252
@ PELIB_IMAGE_FILE_MACHINE_PENTIUM
Definition: PeLibAux.h:244
@ PELIB_IMAGE_FILE_MACHINE_ALPHA
Definition: PeLibAux.h:250
@ PELIB_IMAGE_FILE_MACHINE_THUMB
Definition: PeLibAux.h:257
@ PELIB_IMAGE_FILE_MACHINE_AXP64
Definition: PeLibAux.h:267
@ PELIB_IMAGE_FILE_MACHINE_TRICORE
Definition: PeLibAux.h:270
@ PELIB_IMAGE_FILE_MACHINE_R4000
Definition: PeLibAux.h:247
@ PELIB_IMAGE_FILE_MACHINE_WCEMIPSV2
Definition: PeLibAux.h:249
@ PELIB_IMAGE_FILE_MACHINE_R10000
Definition: PeLibAux.h:248
@ PELIB_IMAGE_FILE_MACHINE_PARISC
Definition: PeLibAux.h:265
@ PELIB_IMAGE_FILE_MACHINE_MOTOROLA68000
Definition: PeLibAux.h:264
@ PELIB_IMAGE_FILE_MACHINE_ARMNT
Definition: PeLibAux.h:258
@ PELIB_IMAGE_FILE_MACHINE_R3000_BIG
Definition: PeLibAux.h:245
@ PELIB_IMAGE_FILE_MACHINE_MSIL
Definition: PeLibAux.h:275
@ PELIB_IMAGE_FILE_MACHINE_ALPHA64
Definition: PeLibAux.h:266
@ PELIB_IMAGE_FILE_MACHINE_SH3E
Definition: PeLibAux.h:253
@ PELIB_IMAGE_FILE_MACHINE_SH3
Definition: PeLibAux.h:251
@ PELIB_IMAGE_FILE_MACHINE_I486
Definition: PeLibAux.h:243
@ PELIB_IMAGE_FILE_MACHINE_I386
Definition: PeLibAux.h:242
@ PELIB_IMAGE_FILE_MACHINE_SH4
Definition: PeLibAux.h:254
@ PELIB_IMAGE_FILE_MACHINE_AMD64
Definition: PeLibAux.h:272
@ PELIB_IMAGE_FILE_MACHINE_MIPSFPU16
Definition: PeLibAux.h:269
@ PELIB_IMAGE_FILE_MACHINE_UNKNOWN
Definition: PeLibAux.h:241
@ PELIB_IMAGE_FILE_MACHINE_MIPS16
Definition: PeLibAux.h:263
@ PELIB_IMAGE_FILE_MACHINE_M32R
Definition: PeLibAux.h:273
@ PELIB_IMAGE_FILE_MACHINE_SH5
Definition: PeLibAux.h:255
@ PELIB_IMAGE_FILE_MACHINE_ARM64
Definition: PeLibAux.h:274
const std::uint32_t PELIB_IMAGE_RESOURCE_DATA_IS_DIRECTORY
Definition: PeLibAux.h:162
const std::size_t IMPORT_SYMBOL_MAX_LENGTH
Definition: PeLibAux.h:1131
const std::uint32_t PELIB_IMAGE_RESOURCE_RVA_MASK
Definition: PeLibAux.h:164
@ PELIB_IMAGE_SUBSYSTEM_OS2_CUI
Definition: PeLibAux.h:324
@ PELIB_IMAGE_SUBSYSTEM_NATIVE_WINDOWS
Definition: PeLibAux.h:326
@ PELIB_IMAGE_SUBSYSTEM_WINDOWS_CUI
Definition: PeLibAux.h:323
@ PELIB_IMAGE_SUBSYSTEM_POSIX_CUI
Definition: PeLibAux.h:325
@ PELIB_IMAGE_SUBSYSTEM_WINDOWS_GUI
Definition: PeLibAux.h:322
@ PELIB_IMAGE_SUBSYSTEM_UNKNOWN
Definition: PeLibAux.h:320
@ PELIB_IMAGE_SUBSYSTEM_NATIVE
Definition: PeLibAux.h:321
@ PELIB_IMAGE_SUBSYSTEM_WINDOWS_CE_GUI
Definition: PeLibAux.h:327
const std::uint32_t PELIB_IMAGE_RESOURCE_NAME_IS_STRING
Definition: PeLibAux.h:163
const std::uint32_t PELIB_SIZE_10MB
Definition: PeLibAux.h:145
const std::size_t COFF_SYMBOL_NAME_MAX_LENGTH
Definition: PeLibAux.h:1245
@ PELIB_PAGE_WRITECOPY
Definition: PeLibAux.h:191
@ PELIB_PAGE_EXECUTE_READ
Definition: PeLibAux.h:193
@ PELIB_PAGE_EXECUTE
Definition: PeLibAux.h:192
@ PELIB_PAGE_NOACCESS
Definition: PeLibAux.h:188
@ PELIB_PAGE_READWRITE
Definition: PeLibAux.h:190
@ PELIB_PAGE_EXECUTE_READWRITE
Definition: PeLibAux.h:194
@ PELIB_PAGE_EXECUTE_WRITECOPY
Definition: PeLibAux.h:195
@ PELIB_PAGE_READONLY
Definition: PeLibAux.h:189
const unsigned int PELIB_IMAGE_SIZEOF_COFF_SYMBOL
Definition: PeLibAux.h:1244
const std::uint32_t PELIB_MM_SIZE_OF_LARGEST_IMAGE
Definition: PeLibAux.h:149
@ PELIB_WIN_CERT_REVISION_2_0
Definition: PeLibAux.h:1483
@ PELIB_WIN_CERT_REVISION_1_0
Definition: PeLibAux.h:1482
@ PELIB_IMAGE_SCN_LNK_OTHER
Definition: PeLibAux.h:204
@ PELIB_IMAGE_SCN_MEM_PRELOAD
Definition: PeLibAux.h:214
@ PELIB_IMAGE_SCN_ALIGN_4096BYTES
Definition: PeLibAux.h:227
@ PELIB_IMAGE_SCN_ALIGN_BYTES
Definition: PeLibAux.h:220
@ PELIB_IMAGE_SCN_CNT_CODE
Definition: PeLibAux.h:201
@ PELIB_IMAGE_SCN_MEM_LOCKED
Definition: PeLibAux.h:213
@ PELIB_IMAGE_SCN_ALIGN_1BYTES
Definition: PeLibAux.h:215
@ PELIB_IMAGE_SCN_MEM_NOT_PAGED
Definition: PeLibAux.h:232
@ PELIB_IMAGE_SCN_ALIGN_256BYTES
Definition: PeLibAux.h:223
@ PELIB_IMAGE_SCN_LNK_NRELOC_OVFL
Definition: PeLibAux.h:229
@ PELIB_IMAGE_SCN_ALIGN_1024BYTES
Definition: PeLibAux.h:225
@ PELIB_IMAGE_SCN_NO_DEFER_SPEC_EXC
Definition: PeLibAux.h:208
@ PELIB_IMAGE_SCN_ALIGN_8192BYTES
Definition: PeLibAux.h:228
@ PELIB_IMAGE_SCN_ALIGN_16BYTES
Definition: PeLibAux.h:219
@ PELIB_IMAGE_SCN_ALIGN_512BYTES
Definition: PeLibAux.h:224
@ PELIB_IMAGE_SCN_MEM_FARDATA
Definition: PeLibAux.h:210
@ PELIB_IMAGE_SCN_ALIGN_128BYTES
Definition: PeLibAux.h:222
@ PELIB_IMAGE_SCN_ALIGN_8BYTES
Definition: PeLibAux.h:218
@ PELIB_IMAGE_SCN_MEM_PURGEABLE
Definition: PeLibAux.h:211
@ PELIB_IMAGE_SCN_ALIGN_2048BYTES
Definition: PeLibAux.h:226
@ PELIB_IMAGE_SCN_CNT_UNINITIALIZED_DATA
Definition: PeLibAux.h:203
@ PELIB_IMAGE_SCN_MEM_EXECUTE
Definition: PeLibAux.h:234
@ PELIB_IMAGE_SCN_LNK_REMOVE
Definition: PeLibAux.h:206
@ PELIB_IMAGE_SCN_CNT_INITIALIZED_DATA
Definition: PeLibAux.h:202
@ PELIB_IMAGE_SCN_LNK_COMDAT
Definition: PeLibAux.h:207
@ PELIB_IMAGE_SCN_ALIGN_2BYTES
Definition: PeLibAux.h:216
@ PELIB_IMAGE_SCN_GPREL
Definition: PeLibAux.h:209
@ PELIB_IMAGE_SCN_MEM_16BIT
Definition: PeLibAux.h:212
@ PELIB_IMAGE_SCN_LNK_INFO
Definition: PeLibAux.h:205
@ PELIB_IMAGE_SCN_MEM_DISCARDABLE
Definition: PeLibAux.h:230
@ PELIB_IMAGE_SCN_MEM_READ
Definition: PeLibAux.h:235
@ PELIB_IMAGE_SCN_MEM_NOT_CACHED
Definition: PeLibAux.h:231
@ PELIB_IMAGE_SCN_MEM_WRITE
Definition: PeLibAux.h:236
@ PELIB_IMAGE_SCN_TYPE_NO_PAD
Definition: PeLibAux.h:200
@ PELIB_IMAGE_SCN_ALIGN_4BYTES
Definition: PeLibAux.h:217
@ PELIB_IMAGE_SCN_ALIGN_64BYTES
Definition: PeLibAux.h:221
@ PELIB_IMAGE_SCN_MEM_SHARED
Definition: PeLibAux.h:233
const std::uint32_t PELIB_DELAY_ATTRIBUTE_V2
Definition: PeLibAux.h:1399
const std::uint32_t PELIB_PAGE_SIZE
Definition: PeLibAux.h:139
std::uint64_t fileSize(const std::string &filename)
Definition: PeLibAux.cpp:138
@ PEFILE_UNKNOWN
Definition: PeLibAux.h:134
@ PEFILE32
Definition: PeLibAux.h:132
@ PEFILE64
Definition: PeLibAux.h:133
const std::uint32_t PE_MAX_SECTION_COUNT_XP
Definition: PeLibAux.h:155
const std::uint32_t PE_MAX_SECTION_COUNT_7
Definition: PeLibAux.h:156
const std::uint32_t PELIB_PAGE_SIZE_SHIFT
Definition: PeLibAux.h:141
const unsigned int PELIB_IMAGE_SIZEOF_SHORT_NAME
Definition: PeLibAux.h:775
const std::uint32_t PELIB_MAX_TLS_CALLBACKS
Definition: PeLibAux.h:151
const std::uint32_t PELIB_MAX_EXPORTED_FUNCTIONS
Definition: PeLibAux.h:154
const unsigned int PELIB_IMAGE_SIZEOF_MAX_NAME
Definition: PeLibAux.h:776
const std::uint32_t PELIB_SIZE_64KB
Definition: PeLibAux.h:143
const std::uint32_t PELIB_MAX_IMPORTED_FUNCTIONS
Definition: PeLibAux.h:153
errorCodes
Definition: PeLibAux.h:32
@ ERROR_DIRECTORY_DOES_NOT_EXIST
Definition: PeLibAux.h:42
@ ERROR_NOT_ENOUGH_SPACE
Definition: PeLibAux.h:37
@ ERROR_NONE
Definition: PeLibAux.h:33
@ ERROR_TOO_MANY_SECTIONS
Definition: PeLibAux.h:36
@ ERROR_NO_FILE_ALIGNMENT
Definition: PeLibAux.h:38
@ ERROR_NO_SECTION_ALIGNMENT
Definition: PeLibAux.h:39
@ ERROR_COFF_SYMBOL_TABLE_DOES_NOT_EXIST
Definition: PeLibAux.h:43
@ ERROR_DUPLICATE_ENTRY
Definition: PeLibAux.h:41
@ ERROR_OPENING_FILE
Definition: PeLibAux.h:34
@ ERROR_INVALID_FILE
Definition: PeLibAux.h:35
@ ERROR_ENTRY_NOT_FOUND
Definition: PeLibAux.h:40
@ PELIB_RT_GROUP_ICON
Definition: PeLibAux.h:356
@ PELIB_RT_MENU
Definition: PeLibAux.h:347
@ PELIB_RT_VXD
Definition: PeLibAux.h:360
@ PELIB_RT_MESSAGETABLE
Definition: PeLibAux.h:354
@ PELIB_RT_PLUGPLAY
Definition: PeLibAux.h:359
@ PELIB_RT_FONTDIR
Definition: PeLibAux.h:350
@ PELIB_RT_RCDATA
Definition: PeLibAux.h:353
@ PELIB_RT_STRING
Definition: PeLibAux.h:349
@ PELIB_RT_DLGINCLUDE
Definition: PeLibAux.h:358
@ PELIB_RT_HTML
Definition: PeLibAux.h:363
@ PELIB_RT_MANIFEST
Definition: PeLibAux.h:364
@ PELIB_RT_ANIICON
Definition: PeLibAux.h:362
@ PELIB_RT_FONT
Definition: PeLibAux.h:351
@ PELIB_RT_CURSOR
Definition: PeLibAux.h:344
@ PELIB_RT_ICON
Definition: PeLibAux.h:346
@ PELIB_RT_ACCELERATOR
Definition: PeLibAux.h:352
@ PELIB_RT_VERSION
Definition: PeLibAux.h:357
@ PELIB_RT_GROUP_CURSOR
Definition: PeLibAux.h:355
@ PELIB_RT_BITMAP
Definition: PeLibAux.h:345
@ PELIB_RT_DIALOG
Definition: PeLibAux.h:348
@ PELIB_RT_TOOLBAR
Definition: PeLibAux.h:366
@ PELIB_RT_DLGINIT
Definition: PeLibAux.h:365
@ PELIB_RT_ANICURSOR
Definition: PeLibAux.h:361
bool isPrintable(const std::string &str)
Checks if the string is printable.
Definition: string.cpp:945
Definition: PeLibAux.h:1152
std::vector< std::uint16_t > vRelocData
Definition: PeLibAux.h:1154
PELIB_IMAGE_BASE_RELOCATION ibrRelocation
Definition: PeLibAux.h:1153
Definition: PeLibAux.h:120
const char * loaderErrorUserFriendly
Definition: PeLibAux.h:122
bool loadableAnyway
Definition: PeLibAux.h:123
const char * loaderErrorString
Definition: PeLibAux.h:121
Definition: PeLibAux.h:1091
PELIB_DELAY_IMPORT()
Definition: PeLibAux.h:1096
std::string fname
Definition: PeLibAux.h:1094
std::uint16_t hint
Definition: PeLibAux.h:1093
std::uint64_t address
Definition: PeLibAux.h:1092
Definition: PeLibAux.h:952
PELIB_EXP_FUNC_INFORMATION()
Definition: PeLibAux.cpp:288
std::uint32_t addrofname
Definition: PeLibAux.h:954
unsigned int size() const
Definition: PeLibAux.h:961
std::uint32_t addroffunc
Definition: PeLibAux.h:953
std::uint16_t ordinal
Definition: PeLibAux.h:955
std::string funcname
Definition: PeLibAux.h:956
bool equal(const std::string strFunctionName) const
Definition: PeLibAux.cpp:383
Definition: PeLibAux.h:1007
std::uint32_t VirtualAddress
Definition: PeLibAux.h:1008
std::uint32_t SizeOfBlock
Definition: PeLibAux.h:1009
PELIB_IMAGE_BASE_RELOCATION()
Definition: PeLibAux.h:1011
static std::size_t size()
Definition: PeLibAux.h:1017
Definition: PeLibAux.h:938
std::string strModuleName
Name of the imported file.
Definition: PeLibAux.h:940
std::vector< PELIB_IMAGE_BOUND_DIRECTORY > moduleForwarders
Definition: PeLibAux.h:941
PELIB_IMAGE_BOUND_IMPORT_DESCRIPTOR ibdDescriptor
Information about the imported file.
Definition: PeLibAux.h:939
bool equal(const std::string strModuleName2) const
Compares the passed filename to the struct's filename.
Definition: PeLibAux.cpp:378
std::size_t size() const
Definition: PeLibAux.cpp:388
std::uint16_t NumberOfModuleForwarderRefs
Definition: PeLibAux.h:921
static std::size_t size()
Definition: PeLibAux.h:930
std::uint32_t TimeDateStamp
Definition: PeLibAux.h:919
PELIB_IMAGE_BOUND_IMPORT_DESCRIPTOR()
Definition: PeLibAux.h:923
std::uint16_t OffsetModuleName
Definition: PeLibAux.h:920
Definition: PeLibAux.h:1495
std::uint16_t Revision
Definition: PeLibAux.h:1497
std::uint32_t Length
Definition: PeLibAux.h:1496
std::uint16_t CertificateType
Definition: PeLibAux.h:1498
static unsigned int size()
Definition: PeLibAux.h:1501
std::vector< unsigned char > Certificate
Definition: PeLibAux.h:1499
Definition: PeLibAux.h:1248
std::string Name
Definition: PeLibAux.h:1250
std::uint8_t TypeComplex
Definition: PeLibAux.h:1253
std::uint8_t NumberOfAuxSymbols
Definition: PeLibAux.h:1256
std::uint8_t TypeSimple
Definition: PeLibAux.h:1254
PELIB_IMAGE_COFF_SYMBOL()
Definition: PeLibAux.h:1258
std::uint16_t SectionNumber
Definition: PeLibAux.h:1252
std::uint8_t StorageClass
Definition: PeLibAux.h:1255
std::uint32_t Value
Definition: PeLibAux.h:1251
std::uint32_t Index
Definition: PeLibAux.h:1249
Definition: PeLibAux.h:1021
PELIB_IMAGE_DATA_DIRECTORY MetaData
Definition: PeLibAux.h:1025
std::uint16_t MinorRuntimeVersion
Definition: PeLibAux.h:1024
std::uint32_t EntryPointToken
Definition: PeLibAux.h:1027
PELIB_IMAGE_DATA_DIRECTORY VTableFixups
Definition: PeLibAux.h:1031
std::uint32_t cb
Definition: PeLibAux.h:1022
std::uint32_t Flags
Definition: PeLibAux.h:1026
PELIB_IMAGE_COR20_HEADER()
Definition: PeLibAux.cpp:331
PELIB_IMAGE_DATA_DIRECTORY Resources
Definition: PeLibAux.h:1028
std::uint16_t MajorRuntimeVersion
Definition: PeLibAux.h:1023
static std::size_t size()
Definition: PeLibAux.h:1036
PELIB_IMAGE_DATA_DIRECTORY ManagedNativeHeader
Definition: PeLibAux.h:1033
PELIB_IMAGE_DATA_DIRECTORY CodeManagerTable
Definition: PeLibAux.h:1030
PELIB_IMAGE_DATA_DIRECTORY StrongNameSignature
Definition: PeLibAux.h:1029
PELIB_IMAGE_DATA_DIRECTORY ExportAddressTableJumps
Definition: PeLibAux.h:1032
Definition: PeLibAux.h:614
static std::size_t size()
Definition: PeLibAux.h:624
std::uint32_t Size
Definition: PeLibAux.h:616
PELIB_IMAGE_DATA_DIRECTORY()
Definition: PeLibAux.h:618
std::uint32_t VirtualAddress
Definition: PeLibAux.h:615
Definition: PeLibAux.h:1158
std::uint32_t PointerToRawData
Definition: PeLibAux.h:1166
PELIB_IMAGE_DEBUG_DIRECTORY()
Definition: PeLibAux.cpp:362
std::uint32_t Characteristics
Definition: PeLibAux.h:1159
static std::size_t size()
Definition: PeLibAux.h:1168
std::uint16_t MinorVersion
Definition: PeLibAux.h:1162
std::uint16_t MajorVersion
Definition: PeLibAux.h:1161
std::uint32_t TimeDateStamp
Definition: PeLibAux.h:1160
std::uint32_t AddressOfRawData
Definition: PeLibAux.h:1165
std::uint32_t SizeOfData
Definition: PeLibAux.h:1164
std::uint32_t Type
Definition: PeLibAux.h:1163
bool hasOrdinalNumbers
Definition: PeLibAux.h:1405
~PELIB_IMAGE_DELAY_IMPORT_DIRECTORY_RECORD()
Definition: PeLibAux.h:1417
void init()
Definition: PeLibAux.h:1422
std::vector< PELIB_DELAY_IMPORT > Functions
Definition: PeLibAux.h:1406
PELIB_DELAY_IMPORT * getFunction(std::size_t index)
Definition: PeLibAux.h:1454
const PELIB_DELAY_IMPORT * getFunction(std::size_t index) const
Definition: PeLibAux.h:1449
std::vector< PELIB_DELAY_IMPORT >::const_iterator DelayImportIterator
Definition: PeLibAux.h:1404
auto getNumberOfFunctions() const
Definition: PeLibAux.h:1444
DelayImportIterator begin()
Definition: PeLibAux.h:1464
DelayImportIterator end()
Definition: PeLibAux.h:1474
auto ordinalNumbersAreValid() const
Definition: PeLibAux.h:1439
std::string Name
Definition: PeLibAux.h:1410
void addFunction(const PELIB_DELAY_IMPORT &function)
Definition: PeLibAux.h:1430
PELIB_IMAGE_DELAY_LOAD_DESCRIPTOR delayedImport
Definition: PeLibAux.h:1409
const DelayImportIterator begin() const
Definition: PeLibAux.h:1459
PELIB_IMAGE_DELAY_IMPORT_DIRECTORY_RECORD()
Definition: PeLibAux.h:1412
const DelayImportIterator end() const
Definition: PeLibAux.h:1469
Definition: PeLibAux.h:1388
std::uint32_t BoundDelayImportTableRva
Definition: PeLibAux.h:1394
std::uint32_t DelayImportAddressTableRva
Definition: PeLibAux.h:1392
std::uint32_t ModuleHandleRva
Definition: PeLibAux.h:1391
std::uint32_t TimeStamp
Definition: PeLibAux.h:1396
std::uint32_t Attributes
Definition: PeLibAux.h:1389
std::uint32_t NameRva
Definition: PeLibAux.h:1390
std::uint32_t UnloadDelayImportTableRva
Definition: PeLibAux.h:1395
std::uint32_t DelayImportNameTableRva
Definition: PeLibAux.h:1393
Definition: PeLibAux.h:554
std::uint16_t e_res2[10]
Definition: PeLibAux.h:572
std::uint16_t e_oeminfo
Definition: PeLibAux.h:571
std::uint16_t e_cblp
Definition: PeLibAux.h:556
std::uint16_t e_sp
Definition: PeLibAux.h:563
static std::size_t size()
Definition: PeLibAux.h:580
std::uint16_t e_csum
Definition: PeLibAux.h:564
std::uint16_t e_ovno
Definition: PeLibAux.h:568
std::uint16_t e_res[4]
Definition: PeLibAux.h:569
PELIB_IMAGE_DOS_HEADER()
Definition: PeLibAux.h:575
std::uint16_t e_lfarlc
Definition: PeLibAux.h:567
std::uint16_t e_ss
Definition: PeLibAux.h:562
std::uint16_t e_oemid
Definition: PeLibAux.h:570
std::uint16_t e_cp
Definition: PeLibAux.h:557
std::uint16_t e_cparhdr
Definition: PeLibAux.h:559
std::uint32_t e_lfanew
Definition: PeLibAux.h:573
std::uint16_t e_cs
Definition: PeLibAux.h:566
std::uint16_t e_minalloc
Definition: PeLibAux.h:560
std::uint16_t e_ip
Definition: PeLibAux.h:565
std::uint16_t e_maxalloc
Definition: PeLibAux.h:561
std::uint16_t e_magic
Definition: PeLibAux.h:555
std::uint16_t e_crlc
Definition: PeLibAux.h:558
Definition: PeLibAux.h:883
std::uint16_t MinorVersion
Definition: PeLibAux.h:887
static std::size_t size()
Definition: PeLibAux.h:911
std::uint32_t AddressOfFunctions
Definition: PeLibAux.h:892
std::uint32_t NumberOfNames
Definition: PeLibAux.h:891
std::uint32_t NumberOfFunctions
Definition: PeLibAux.h:890
std::uint32_t Base
Definition: PeLibAux.h:889
std::uint32_t AddressOfNames
Definition: PeLibAux.h:893
PELIB_IMAGE_EXPORT_DIRECTORY()
Definition: PeLibAux.h:896
std::uint32_t TimeDateStamp
Definition: PeLibAux.h:885
std::uint32_t Characteristics
Definition: PeLibAux.h:884
std::uint32_t AddressOfNameOrdinals
Definition: PeLibAux.h:894
std::uint32_t Name
Definition: PeLibAux.h:888
std::uint16_t MajorVersion
Definition: PeLibAux.h:886
Definition: PeLibAux.h:1041
std::size_t size() const
Definition: PeLibAux.h:1048
std::vector< PELIB_EXP_FUNC_INFORMATION > functions
Definition: PeLibAux.h:1046
std::string name
The original filename of current file.
Definition: PeLibAux.h:1045
PELIB_IMAGE_EXPORT_DIRECTORY ied
The IMAGE_EXPORTED_DIRECTORY of a file's export table.
Definition: PeLibAux.h:1043
Definition: PeLibAux.h:587
PELIB_IMAGE_FILE_HEADER()
Definition: PeLibAux.h:596
std::uint32_t TimeDateStamp
Definition: PeLibAux.h:590
std::uint16_t Machine
Definition: PeLibAux.h:588
std::uint16_t SizeOfOptionalHeader
Definition: PeLibAux.h:593
static std::size_t size()
Definition: PeLibAux.h:607
std::uint16_t Characteristics
Definition: PeLibAux.h:594
std::uint32_t PointerToSymbolTable
Definition: PeLibAux.h:591
std::uint32_t NumberOfSymbols
Definition: PeLibAux.h:592
std::uint16_t NumberOfSections
Definition: PeLibAux.h:589
Definition: PeLibAux.h:863
std::uint32_t ForwarderChain
Definition: PeLibAux.h:866
static std::size_t size()
Definition: PeLibAux.h:879
PELIB_IMAGE_IMPORT_DESCRIPTOR()
Definition: PeLibAux.h:870
std::uint32_t TimeDateStamp
Definition: PeLibAux.h:865
std::uint32_t Name
Definition: PeLibAux.h:867
std::uint32_t OriginalFirstThunk
Definition: PeLibAux.h:864
std::uint32_t FirstThunk
Definition: PeLibAux.h:868
Definition: PeLibAux.h:1105
std::uint32_t calculateSize(std::uint32_t pointerSize) const
Definition: PeLibAux.h:1115
std::vector< PELIB_THUNK_DATA > originalfirstthunk
All original first thunk values of an imported DLL.
Definition: PeLibAux.h:1111
bool operator==(std::string strFilename) const
Definition: PeLibAux.h:1124
std::vector< PELIB_THUNK_DATA > firstthunk
All first thunk value of an imported DLL.
Definition: PeLibAux.h:1113
std::string name
The name of an imported DLL.
Definition: PeLibAux.h:1109
PELIB_IMAGE_IMPORT_DESCRIPTOR impdesc
The IMAGE_IMPORT_DESCRIPTOR of an imported DLL.
Definition: PeLibAux.h:1107
std::uint32_t CatalogOffset
Definition: PeLibAux.h:1284
std::uint16_t Flags
Definition: PeLibAux.h:1282
std::uint16_t Catalog
Definition: PeLibAux.h:1283
std::uint32_t Reserved
Definition: PeLibAux.h:1285
std::uint32_t GuardLongJumpTargetCount
Definition: PeLibAux.h:1320
std::uint32_t SEHandlerCount
Definition: PeLibAux.h:1310
std::uint16_t DynamicValueRelocTableSection
Definition: PeLibAux.h:1326
std::uint32_t DynamicValueRelocTableOffset
Definition: PeLibAux.h:1325
std::uint32_t Reserved3
Definition: PeLibAux.h:1330
std::uint32_t GuardCFDispatchFunctionPointer
Definition: PeLibAux.h:1312
std::uint32_t MaximumAllocationSize
Definition: PeLibAux.h:1301
std::uint32_t GuardRFVerifyStackPointerFunctionPointer
Definition: PeLibAux.h:1328
std::uint32_t ProcessAffinityMask
Definition: PeLibAux.h:1304
std::uint32_t DeCommitFreeBlockThreshold
Definition: PeLibAux.h:1298
std::uint32_t SecurityCookie
Definition: PeLibAux.h:1308
std::uint32_t Size
Definition: PeLibAux.h:1291
std::uint32_t ProcessHeapFlags
Definition: PeLibAux.h:1303
std::uint32_t GlobalFlagsSet
Definition: PeLibAux.h:1296
std::uint32_t VolatileMetadataPointer
Definition: PeLibAux.h:1332
std::uint32_t GuardAddressTakenIatEntryCount
Definition: PeLibAux.h:1318
std::uint32_t GuardCFCheckFunctionPointer
Definition: PeLibAux.h:1311
std::uint32_t EditList
Definition: PeLibAux.h:1307
std::uint16_t DependentLoadFlags
Definition: PeLibAux.h:1306
std::uint32_t GuardEHContinuationCount
Definition: PeLibAux.h:1334
std::uint16_t CSDVersion
Definition: PeLibAux.h:1305
std::uint16_t MajorVersion
Definition: PeLibAux.h:1293
std::uint16_t MinorVersion
Definition: PeLibAux.h:1294
std::uint32_t SEHandlerTable
Definition: PeLibAux.h:1309
std::uint32_t GuardCFFunctionCount
Definition: PeLibAux.h:1314
std::uint32_t GuardFlags
Definition: PeLibAux.h:1315
std::uint32_t LockPrefixTable
Definition: PeLibAux.h:1300
std::uint16_t Reserved2
Definition: PeLibAux.h:1327
std::uint32_t EnclaveConfigurationPointer
Definition: PeLibAux.h:1331
std::uint32_t CriticalSectionDefaultTimeout
Definition: PeLibAux.h:1297
std::uint32_t GuardRFFailureRoutineFunctionPointer
Definition: PeLibAux.h:1324
PELIB_IMAGE_LOAD_CONFIG_CODE_INTEGRITY CodeIntegrity
Definition: PeLibAux.h:1316
std::uint32_t GuardCFFunctionTable
Definition: PeLibAux.h:1313
std::uint32_t CHPEMetadataPointer
Definition: PeLibAux.h:1322
std::uint32_t GuardLongJumpTargetTable
Definition: PeLibAux.h:1319
std::uint32_t VirtualMemoryThreshold
Definition: PeLibAux.h:1302
std::uint32_t DeCommitTotalFreeThreshold
Definition: PeLibAux.h:1299
std::uint32_t GlobalFlagsClear
Definition: PeLibAux.h:1295
std::uint32_t GuardAddressTakenIatEntryTable
Definition: PeLibAux.h:1317
std::uint32_t GuardEHContinuationTable
Definition: PeLibAux.h:1333
std::uint32_t GuardRFFailureRoutine
Definition: PeLibAux.h:1323
std::uint32_t TimeDateStamp
Definition: PeLibAux.h:1292
std::uint32_t HotPatchTableOffset
Definition: PeLibAux.h:1329
std::uint32_t DynamicValueRelocTable
Definition: PeLibAux.h:1321
PELIB_IMAGE_LOAD_CONFIG_CODE_INTEGRITY CodeIntegrity
Definition: PeLibAux.h:1364
std::uint32_t Size
Definition: PeLibAux.h:1339
std::uint64_t ProcessAffinityMask
Definition: PeLibAux.h:1351
std::uint64_t GuardCFFunctionTable
Definition: PeLibAux.h:1361
std::uint64_t GuardAddressTakenIatEntryCount
Definition: PeLibAux.h:1366
std::uint64_t LockPrefixTable
Definition: PeLibAux.h:1348
std::uint64_t MaximumAllocationSize
Definition: PeLibAux.h:1349
std::uint64_t EditList
Definition: PeLibAux.h:1355
std::uint16_t CSDVersion
Definition: PeLibAux.h:1353
std::uint64_t SecurityCookie
Definition: PeLibAux.h:1356
std::uint16_t MajorVersion
Definition: PeLibAux.h:1341
std::uint64_t GuardEHContinuationTable
Definition: PeLibAux.h:1381
std::uint64_t GuardRFFailureRoutine
Definition: PeLibAux.h:1371
std::uint32_t Reserved3
Definition: PeLibAux.h:1378
std::uint64_t SEHandlerTable
Definition: PeLibAux.h:1357
std::uint32_t CriticalSectionDefaultTimeout
Definition: PeLibAux.h:1345
std::uint64_t DeCommitFreeBlockThreshold
Definition: PeLibAux.h:1346
std::uint32_t ProcessHeapFlags
Definition: PeLibAux.h:1352
std::uint64_t GuardRFVerifyStackPointerFunctionPointer
Definition: PeLibAux.h:1376
std::uint32_t GuardFlags
Definition: PeLibAux.h:1363
std::uint16_t DependentLoadFlags
Definition: PeLibAux.h:1354
std::uint64_t GuardEHContinuationCount
Definition: PeLibAux.h:1382
std::uint16_t Reserved2
Definition: PeLibAux.h:1375
std::uint32_t GlobalFlagsClear
Definition: PeLibAux.h:1343
std::uint32_t DynamicValueRelocTableOffset
Definition: PeLibAux.h:1373
std::uint64_t DynamicValueRelocTable
Definition: PeLibAux.h:1369
std::uint64_t GuardCFDispatchFunctionPointer
Definition: PeLibAux.h:1360
std::uint64_t GuardLongJumpTargetTable
Definition: PeLibAux.h:1367
std::uint64_t GuardAddressTakenIatEntryTable
Definition: PeLibAux.h:1365
std::uint64_t SEHandlerCount
Definition: PeLibAux.h:1358
std::uint64_t GuardRFFailureRoutineFunctionPointer
Definition: PeLibAux.h:1372
std::uint32_t HotPatchTableOffset
Definition: PeLibAux.h:1377
std::uint64_t CHPEMetadataPointer
Definition: PeLibAux.h:1370
std::uint64_t GuardCFFunctionCount
Definition: PeLibAux.h:1362
std::uint32_t TimeDateStamp
Definition: PeLibAux.h:1340
std::uint16_t DynamicValueRelocTableSection
Definition: PeLibAux.h:1374
std::uint64_t DeCommitTotalFreeThreshold
Definition: PeLibAux.h:1347
std::uint64_t VirtualMemoryThreshold
Definition: PeLibAux.h:1350
std::uint64_t GuardCFCheckFunctionPointer
Definition: PeLibAux.h:1359
std::uint64_t EnclaveConfigurationPointer
Definition: PeLibAux.h:1379
std::uint64_t GuardLongJumpTargetCount
Definition: PeLibAux.h:1368
std::uint16_t MinorVersion
Definition: PeLibAux.h:1342
std::uint32_t GlobalFlagsSet
Definition: PeLibAux.h:1344
std::uint64_t VolatileMetadataPointer
Definition: PeLibAux.h:1380
Definition: PeLibAux.h:737
PELIB_IMAGE_NT_HEADERS_EX()
Definition: PeLibAux.h:768
std::vector< PELIB_IMAGE_DATA_DIRECTORY > dataDirectories
Definition: PeLibAux.h:741
bool lastDirectoryIsIncomplete
Definition: PeLibAux.h:742
unsigned int size() const
Definition: PeLibAux.h:749
unsigned int loadedSize() const
Definition: PeLibAux.h:757
unsigned int sizeOfSignature() const
Definition: PeLibAux.h:744
std::uint32_t Signature
Definition: PeLibAux.h:738
PELIB_IMAGE_FILE_HEADER FileHeader
Definition: PeLibAux.h:739
PELIB_IMAGE_OPTIONAL_HEADER OptionalHeader
Definition: PeLibAux.h:740
Definition: PeLibAux.h:628
std::uint32_t BaseOfData
Definition: PeLibAux.h:637
std::uint32_t SizeOfHeapCommit
Definition: PeLibAux.h:656
std::uint16_t Subsystem
Definition: PeLibAux.h:651
std::uint32_t SizeOfStackCommit
Definition: PeLibAux.h:654
std::uint16_t MinorImageVersion
Definition: PeLibAux.h:644
std::uint8_t MinorLinkerVersion
Definition: PeLibAux.h:631
std::uint32_t SizeOfInitializedData
Definition: PeLibAux.h:633
std::uint32_t FileAlignment
Definition: PeLibAux.h:640
std::uint32_t LoaderFlags
Definition: PeLibAux.h:657
std::uint32_t Win32VersionValue
Definition: PeLibAux.h:647
std::uint16_t MinorOperatingSystemVersion
Definition: PeLibAux.h:642
std::uint32_t NumberOfRvaAndSizes
Definition: PeLibAux.h:658
std::uint32_t SizeOfHeaders
Definition: PeLibAux.h:649
std::uint16_t MajorSubsystemVersion
Definition: PeLibAux.h:645
std::uint32_t SizeOfHeapReserve
Definition: PeLibAux.h:655
std::uint16_t MajorOperatingSystemVersion
Definition: PeLibAux.h:641
std::uint32_t AddressOfEntryPoint
Definition: PeLibAux.h:635
std::uint32_t SizeOfCode
Definition: PeLibAux.h:632
std::uint16_t DllCharacteristics
Definition: PeLibAux.h:652
std::uint16_t MajorImageVersion
Definition: PeLibAux.h:643
std::uint32_t CheckSum
Definition: PeLibAux.h:650
std::uint32_t SizeOfStackReserve
Definition: PeLibAux.h:653
std::uint32_t BaseOfCode
Definition: PeLibAux.h:636
std::uint16_t MinorSubsystemVersion
Definition: PeLibAux.h:646
std::uint32_t SizeOfImage
Definition: PeLibAux.h:648
std::uint8_t MajorLinkerVersion
Definition: PeLibAux.h:630
std::uint16_t Magic
Definition: PeLibAux.h:629
std::uint32_t ImageBase
Definition: PeLibAux.h:638
std::uint32_t SizeOfUninitializedData
Definition: PeLibAux.h:634
PELIB_IMAGE_DATA_DIRECTORY DataDirectory[PELIB_IMAGE_NUMBEROF_DIRECTORY_ENTRIES]
Definition: PeLibAux.h:660
std::uint32_t SectionAlignment
Definition: PeLibAux.h:639
Definition: PeLibAux.h:664
std::uint32_t BaseOfCode
Definition: PeLibAux.h:672
std::uint64_t ImageBase
Definition: PeLibAux.h:673
std::uint32_t SizeOfInitializedData
Definition: PeLibAux.h:669
std::uint16_t MajorSubsystemVersion
Definition: PeLibAux.h:680
std::uint32_t SizeOfCode
Definition: PeLibAux.h:668
std::uint16_t MinorOperatingSystemVersion
Definition: PeLibAux.h:677
std::uint16_t MinorSubsystemVersion
Definition: PeLibAux.h:681
std::uint64_t SizeOfStackCommit
Definition: PeLibAux.h:689
std::uint32_t SizeOfUninitializedData
Definition: PeLibAux.h:670
std::uint8_t MinorLinkerVersion
Definition: PeLibAux.h:667
std::uint16_t Magic
Definition: PeLibAux.h:665
std::uint32_t CheckSum
Definition: PeLibAux.h:685
std::uint32_t Win32VersionValue
Definition: PeLibAux.h:682
std::uint32_t FileAlignment
Definition: PeLibAux.h:675
std::uint16_t MinorImageVersion
Definition: PeLibAux.h:679
std::uint32_t AddressOfEntryPoint
Definition: PeLibAux.h:671
std::uint64_t SizeOfHeapReserve
Definition: PeLibAux.h:690
std::uint16_t DllCharacteristics
Definition: PeLibAux.h:687
std::uint32_t SizeOfHeaders
Definition: PeLibAux.h:684
std::uint32_t LoaderFlags
Definition: PeLibAux.h:692
std::uint32_t NumberOfRvaAndSizes
Definition: PeLibAux.h:693
std::uint32_t SectionAlignment
Definition: PeLibAux.h:674
std::uint16_t MajorOperatingSystemVersion
Definition: PeLibAux.h:676
PELIB_IMAGE_DATA_DIRECTORY DataDirectory[PELIB_IMAGE_NUMBEROF_DIRECTORY_ENTRIES]
Definition: PeLibAux.h:695
std::uint8_t MajorLinkerVersion
Definition: PeLibAux.h:666
std::uint64_t SizeOfStackReserve
Definition: PeLibAux.h:688
std::uint64_t SizeOfHeapCommit
Definition: PeLibAux.h:691
std::uint16_t MajorImageVersion
Definition: PeLibAux.h:678
std::uint16_t Subsystem
Definition: PeLibAux.h:686
std::uint32_t SizeOfImage
Definition: PeLibAux.h:683
Definition: PeLibAux.h:700
std::uint16_t MinorImageVersion
Definition: PeLibAux.h:716
std::uint32_t SizeOfInitializedData
Definition: PeLibAux.h:705
PELIB_IMAGE_DATA_DIRECTORY DataDirectory[PELIB_IMAGE_NUMBEROF_DIRECTORY_ENTRIES]
Definition: PeLibAux.h:732
std::uint8_t MajorLinkerVersion
Definition: PeLibAux.h:702
std::uint16_t Magic
Definition: PeLibAux.h:701
std::uint16_t MajorImageVersion
Definition: PeLibAux.h:715
std::uint16_t Subsystem
Definition: PeLibAux.h:723
std::uint32_t SizeOfImage
Definition: PeLibAux.h:720
std::uint32_t SectionAlignment
Definition: PeLibAux.h:711
std::uint16_t MajorOperatingSystemVersion
Definition: PeLibAux.h:713
std::uint32_t SizeOfUninitializedData
Definition: PeLibAux.h:706
std::uint32_t FileAlignment
Definition: PeLibAux.h:712
std::uint32_t LoaderFlags
Definition: PeLibAux.h:729
std::uint16_t MajorSubsystemVersion
Definition: PeLibAux.h:717
std::uint16_t DllCharacteristics
Definition: PeLibAux.h:724
std::uint64_t SizeOfHeapReserve
Definition: PeLibAux.h:727
std::uint32_t AddressOfEntryPoint
Definition: PeLibAux.h:707
std::uint64_t SizeOfStackReserve
Definition: PeLibAux.h:725
std::uint32_t SizeOfHeaders
Definition: PeLibAux.h:721
std::uint32_t Win32VersionValue
Definition: PeLibAux.h:719
std::uint32_t SizeOfCode
Definition: PeLibAux.h:704
std::uint16_t MinorSubsystemVersion
Definition: PeLibAux.h:718
std::uint32_t CheckSum
Definition: PeLibAux.h:722
std::uint64_t SizeOfStackCommit
Definition: PeLibAux.h:726
std::uint32_t NumberOfRvaAndSizes
Definition: PeLibAux.h:730
std::uint32_t BaseOfData
Definition: PeLibAux.h:709
std::uint32_t BaseOfCode
Definition: PeLibAux.h:708
std::uint8_t MinorLinkerVersion
Definition: PeLibAux.h:703
std::uint64_t ImageBase
Definition: PeLibAux.h:710
std::uint64_t SizeOfHeapCommit
Definition: PeLibAux.h:728
std::uint16_t MinorOperatingSystemVersion
Definition: PeLibAux.h:714
Definition: PeLibAux.h:1134
PELIB_IMAGE_RESOURCE_DATA_ENTRY()
Definition: PeLibAux.cpp:354
std::uint32_t Size
Definition: PeLibAux.h:1136
std::uint32_t OffsetToData
Definition: PeLibAux.h:1135
static unsigned int size()
Definition: PeLibAux.h:1140
std::uint32_t Reserved
Definition: PeLibAux.h:1138
std::uint32_t CodePage
Definition: PeLibAux.h:1137
Definition: PeLibAux.h:1146
PELIB_IMAGE_RESOURCE_DATA_ENTRY irdEntry
Definition: PeLibAux.h:1147
std::vector< std::uint8_t > vData
Definition: PeLibAux.h:1148
Definition: PeLibAux.h:986
std::uint32_t OffsetToData
Definition: PeLibAux.h:988
PELIB_IMAGE_RESOURCE_DIRECTORY_ENTRY()
Definition: PeLibAux.cpp:305
static std::size_t size()
Definition: PeLibAux.h:992
std::uint32_t Name
Definition: PeLibAux.h:987
Definition: PeLibAux.h:972
std::uint16_t NumberOfIdEntries
Definition: PeLibAux.h:978
std::uint16_t MajorVersion
Definition: PeLibAux.h:975
std::uint32_t TimeDateStamp
Definition: PeLibAux.h:974
std::uint32_t Characteristics
Definition: PeLibAux.h:973
static std::size_t size()
Definition: PeLibAux.h:982
PELIB_IMAGE_RESOURCE_DIRECTORY()
Definition: PeLibAux.cpp:295
std::uint16_t MinorVersion
Definition: PeLibAux.h:976
std::uint16_t NumberOfNamedEntries
Definition: PeLibAux.h:977
Definition: PeLibAux.h:1266
std::uint16_t ProductId
Definition: PeLibAux.h:1268
std::uint32_t Count
Definition: PeLibAux.h:1270
std::uint16_t ProductBuild
Definition: PeLibAux.h:1269
PELIB_IMAGE_RICH_HEADER_RECORD()
Definition: PeLibAux.h:1274
std::string VisualStudioName
Definition: PeLibAux.h:1272
std::string ProductName
Definition: PeLibAux.h:1271
std::string Signature
Definition: PeLibAux.h:1267
Definition: PeLibAux.h:779
std::uint32_t SizeOfRawData
Definition: PeLibAux.h:797
std::uint32_t VirtualSize
Definition: PeLibAux.h:795
std::uint8_t Name[PELIB_IMAGE_SIZEOF_SHORT_NAME]
Definition: PeLibAux.h:794
std::uint32_t PointerToRawData
Definition: PeLibAux.h:798
std::uint32_t PointerToLinenumbers
Definition: PeLibAux.h:800
std::uint16_t NumberOfRelocations
Definition: PeLibAux.h:801
std::uint16_t NumberOfLinenumbers
Definition: PeLibAux.h:802
std::uint32_t VirtualAddress
Definition: PeLibAux.h:796
std::uint32_t Characteristics
Definition: PeLibAux.h:803
std::uint32_t PointerToRelocations
Definition: PeLibAux.h:799
PELIB_IMAGE_SECTION_HEADER()
Definition: PeLibAux.h:780
Definition: PeLibAux.h:853
PELIB_IMAGE_THUNK_DATA()
Definition: PeLibAux.h:856
std::uint64_t Ordinal
Definition: PeLibAux.h:854
Definition: PeLibAux.h:1180
std::uint32_t StartAddressOfRawData
Definition: PeLibAux.h:1181
std::uint32_t Characteristics
Definition: PeLibAux.h:1186
std::uint32_t SizeOfZeroFill
Definition: PeLibAux.h:1185
std::uint32_t AddressOfIndex
Definition: PeLibAux.h:1183
std::uint32_t EndAddressOfRawData
Definition: PeLibAux.h:1182
std::uint32_t AddressOfCallBacks
Definition: PeLibAux.h:1184
Definition: PeLibAux.h:1190
std::uint64_t StartAddressOfRawData
Definition: PeLibAux.h:1191
std::uint32_t SizeOfZeroFill
Definition: PeLibAux.h:1195
std::uint32_t Characteristics
Definition: PeLibAux.h:1196
PELIB_IMAGE_TLS_DIRECTORY()
Definition: PeLibAux.h:1198
std::uint64_t AddressOfIndex
Definition: PeLibAux.h:1193
std::uint64_t EndAddressOfRawData
Definition: PeLibAux.h:1192
std::uint64_t AddressOfCallBacks
Definition: PeLibAux.h:1194
Definition: PeLibAux.h:1174
std::vector< std::uint8_t > data
Definition: PeLibAux.h:1176
PELIB_IMAGE_DEBUG_DIRECTORY idd
Definition: PeLibAux.h:1175
Definition: PeLibAux.h:998
std::string wstrName
Definition: PeLibAux.h:1000
PELIB_IMAGE_RESOURCE_DIRECTORY_ENTRY irde
Definition: PeLibAux.h:999
bool operator<(const PELIB_IMG_RES_DIR_ENTRY &first) const
Definition: PeLibAux.cpp:311
Definition: PeLibAux.h:807
const std::string & getName() const
Definition: PeLibAux.h:823
static const std::size_t size()
Definition: PeLibAux.h:844
void setVirtualRange(std::uint32_t newVirtualAddress, std::uint32_t newVirtualSize)
Definition: PeLibAux.h:828
void setName(const char *newName)
Definition: PeLibAux.h:808
void setRawDataRange(std::uint32_t newPointerToRawData, std::uint32_t newSizeOfRawData)
Definition: PeLibAux.h:836
std::string sectionName
Definition: PeLibAux.h:849
Definition: PeLibAux.h:1060
bool equalFunctionName(std::string strFunctionName) const
Definition: PeLibAux.h:1079
std::uint16_t hint
The hint of an imported function.
Definition: PeLibAux.h:1064
PELIB_THUNK_DATA()
Definition: PeLibAux.h:1068
PELIB_IMAGE_THUNK_DATA itd
The IMAGE_THUNK_DATA struct of an imported function.
Definition: PeLibAux.h:1062
bool equalHint(std::uint16_t wHint) const
Definition: PeLibAux.h:1073
std::uint32_t calculateSize(std::uint32_t pointerSize) const
Definition: PeLibAux.h:1084
std::string fname
The function name of an imported function.
Definition: PeLibAux.h:1066