retdec
Classes | Typedefs | Enumerations | Functions | Variables
PeLib Namespace Reference

Classes

class  BoundImportDirectory
 Class that handles the BoundImport directory. More...
 
class  CoffSymbolTable
 
class  ComHeaderDirectory
 Class that handles the COM+ descriptor directory. More...
 
class  DebugDirectory
 Class that handles the Debug directory. More...
 
class  DelayImportDirectory
 
class  ExportDirectory
 Class that handles the export directory. More...
 
class  IatDirectory
 Class that handles the Import Address Table (IAT) More...
 
struct  PELIB_IMAGE_COMPARE
 
struct  PELIB_FILE_PAGE
 
class  ImageLoader
 
class  ImportDirectory
 Class that handles import directories. More...
 
class  InputBuffer
 
class  OutputBuffer
 
class  PeFile
 
class  PeFileT
 
struct  LoaderErrorInfo
 
class  PELIB_IMAGE_FILE_MACHINE_ITERATOR
 
struct  PELIB_IMAGE_DOS_HEADER
 
struct  PELIB_IMAGE_FILE_HEADER
 
struct  PELIB_IMAGE_DATA_DIRECTORY
 
struct  PELIB_IMAGE_OPTIONAL_HEADER32
 
struct  PELIB_IMAGE_OPTIONAL_HEADER64
 
struct  PELIB_IMAGE_OPTIONAL_HEADER
 
struct  PELIB_IMAGE_NT_HEADERS_EX
 
struct  PELIB_IMAGE_SECTION_HEADER
 
struct  PELIB_SECTION_HEADER
 
struct  PELIB_IMAGE_THUNK_DATA
 
struct  PELIB_IMAGE_IMPORT_DESCRIPTOR
 
struct  PELIB_IMAGE_EXPORT_DIRECTORY
 
struct  PELIB_IMAGE_BOUND_IMPORT_DESCRIPTOR
 
struct  PELIB_IMAGE_BOUND_DIRECTORY
 
struct  PELIB_EXP_FUNC_INFORMATION
 
struct  PELIB_IMAGE_RESOURCE_DIRECTORY
 
struct  PELIB_IMAGE_RESOURCE_DIRECTORY_ENTRY
 
struct  PELIB_IMG_RES_DIR_ENTRY
 
struct  PELIB_IMAGE_BASE_RELOCATION
 
struct  PELIB_IMAGE_COR20_HEADER
 
struct  PELIB_IMAGE_EXP_DIRECTORY
 
struct  PELIB_THUNK_DATA
 
struct  PELIB_DELAY_IMPORT
 
struct  PELIB_IMAGE_IMPORT_DIRECTORY
 
struct  PELIB_IMAGE_RESOURCE_DATA_ENTRY
 
struct  PELIB_IMAGE_RESOURCE_DATA
 
struct  IMG_BASE_RELOC
 
struct  PELIB_IMAGE_DEBUG_DIRECTORY
 
struct  PELIB_IMG_DEBUG_DIRECTORY
 
struct  PELIB_IMAGE_TLS_DIRECTORY32
 
struct  PELIB_IMAGE_TLS_DIRECTORY
 
struct  PELIB_IMAGE_COFF_SYMBOL
 
struct  PELIB_IMAGE_RICH_HEADER_RECORD
 
struct  PELIB_IMAGE_LOAD_CONFIG_CODE_INTEGRITY
 
struct  PELIB_IMAGE_LOAD_CONFIG_DIRECTORY32
 
struct  PELIB_IMAGE_LOAD_CONFIG_DIRECTORY64
 
struct  PELIB_IMAGE_DELAY_LOAD_DESCRIPTOR
 
struct  PELIB_IMAGE_DELAY_IMPORT_DIRECTORY_RECORD
 
struct  PELIB_IMAGE_CERTIFICATE_ENTRY
 
class  RelocationsDirectory
 Class that handles the relocations directory. More...
 
class  ResourceChild
 The class ResourceChild is used to store information about a resource node. More...
 
class  ResourceElement
 
class  ResourceLeaf
 ResourceLeafs represent the leafs of the resource tree: The actual resources. More...
 
class  ResourceNode
 ResourceNodes represent the nodes in the resource tree. More...
 
struct  fixNumberOfEntries
 Unspecialized function that's used as base template for the specialized versions below. More...
 
struct  fixNumberOfEntries< std::uint32_t >
 Fixes NumberOfIdEntries value of a node. More...
 
struct  fixNumberOfEntries< std::string >
 Fixes NumberOfNamedEntries value of a node. More...
 
class  ResourceDirectory
 Class that represents the resource directory of a PE file. More...
 
class  RichHeader
 
class  SecurityDirectory
 
class  TlsDirectory
 Class that handles the TLS directory. More...
 

Typedefs

typedef bool(* PFN_VERIFY_ADDRESS) (void *ptr, size_t length)
 
typedef bool(* PFN_COMPARE_CALLBACK) (struct PELIB_IMAGE_COMPARE *pImgCompare, size_t BytesCompared, size_t BytesTotal)
 
typedef std::vector< std::uint8_t > ByteBuffer
 

Enumerations

enum class  PELIB_MEMBER_TYPE : std::uint32_t {
  OPTHDR_sizeof , OPTHDR_sizeof_fixed , OPTHDR_NumberOfRvaAndSizes , OPTHDR_DataDirectory ,
  OPTHDR_DataDirectory_EXPORT_Rva , OPTHDR_DataDirectory_RSRC_Rva , OPTHDR_DataDirectory_TLS_Rva , OPTHDR_DataDirectory_CONFIG_Rva
}
 
enum class  PELIB_COMPARE_RESULT : std::uint32_t {
  ImagesEqual , ImagesWindowsLoadedWeDidnt , ImagesWindowsDidntLoadWeDid , ImagesDifferentSize ,
  ImagesDifferentPageAccess , ImagesDifferentPageValue , ImagesInvalidPageInImage , ImagesCompareInvalid
}
 
enum  currdir { OLDDIR = 1 , NEWDIR }
 Parameter for functions that can operate on the OLDDIR or new import directory. More...
 
enum  errorCodes {
  ERROR_NONE = 0 , ERROR_OPENING_FILE = -1 , ERROR_INVALID_FILE = -2 , ERROR_TOO_MANY_SECTIONS = -3 ,
  ERROR_NOT_ENOUGH_SPACE = -4 , ERROR_NO_FILE_ALIGNMENT = -5 , ERROR_NO_SECTION_ALIGNMENT = -6 , ERROR_ENTRY_NOT_FOUND = -7 ,
  ERROR_DUPLICATE_ENTRY = -8 , ERROR_DIRECTORY_DOES_NOT_EXIST = -9 , ERROR_COFF_SYMBOL_TABLE_DOES_NOT_EXIST = -10
}
 
enum  LoaderError {
  LDR_ERROR_NONE = 0 , LDR_ERROR_FILE_TOO_BIG , LDR_ERROR_E_LFANEW_UNALIGNED , LDR_ERROR_E_LFANEW_OUT_OF_FILE ,
  LDR_ERROR_NTHEADER_OFFSET_OVERFLOW , LDR_ERROR_NTHEADER_OUT_OF_FILE , LDR_ERROR_NO_NT_SIGNATURE , LDR_ERROR_FILE_HEADER_INVALID ,
  LDR_ERROR_IMAGE_NON_EXECUTABLE , LDR_ERROR_NO_OPTHDR_MAGIC , LDR_ERROR_SIZE_OF_HEADERS_ZERO , LDR_ERROR_FILE_ALIGNMENT_ZERO ,
  LDR_ERROR_FILE_ALIGNMENT_NOT_POW2 , LDR_ERROR_SECTION_ALIGNMENT_ZERO , LDR_ERROR_SECTION_ALIGNMENT_NOT_POW2 , LDR_ERROR_SECTION_ALIGNMENT_TOO_SMALL ,
  LDR_ERROR_SECTION_ALIGNMENT_INVALID , LDR_ERROR_SIZE_OF_IMAGE_TOO_BIG , LDR_ERROR_INVALID_MACHINE32 , LDR_ERROR_INVALID_MACHINE64 ,
  LDR_ERROR_SIZE_OF_HEADERS_INVALID , LDR_ERROR_SIZE_OF_OPTHDR_NOT_ALIGNED , LDR_ERROR_SIZE_OF_IMAGE_ZERO , LDR_ERROR_IMAGE_BASE_NOT_ALIGNED ,
  LDR_ERROR_SIZE_OF_IMAGE_PTES_ZERO , LDR_ERROR_RAW_DATA_OVERFLOW , LDR_ERROR_SECTION_HEADERS_OUT_OF_IMAGE , LDR_ERROR_SECTION_HEADERS_OVERFLOW ,
  LDR_ERROR_SECTION_SIZE_MISMATCH , LDR_ERROR_INVALID_SECTION_VA , LDR_ERROR_INVALID_SECTION_VSIZE , LDR_ERROR_INVALID_SECTION_RAWSIZE ,
  LDR_ERROR_INVALID_SIZE_OF_IMAGE , LDR_ERROR_FILE_IS_CUT , LDR_ERROR_FILE_IS_CUT_LOADABLE , LDR_ERROR_IMPDIR_OUT_OF_FILE ,
  LDR_ERROR_IMPDIR_CUT , LDR_ERROR_IMPDIR_COUNT_EXCEEDED , LDR_ERROR_IMPDIR_NAME_RVA_INVALID , LDR_ERROR_IMPDIR_THUNK_RVA_INVALID ,
  LDR_ERROR_IMPDIR_IMPORT_COUNT_EXCEEDED , LDR_ERROR_RSRC_OVER_END_OF_IMAGE , LDR_ERROR_RSRC_NAME_OUT_OF_IMAGE , LDR_ERROR_RSRC_DATA_OUT_OF_IMAGE ,
  LDR_ERROR_RSRC_SUBDIR_OUT_OF_IMAGE , LDR_ERROR_ENTRY_POINT_OUT_OF_IMAGE , LDR_ERROR_ENTRY_POINT_ZEROED , LDR_ERROR_DIGITAL_SIGNATURE_CUT ,
  LDR_ERROR_DIGITAL_SIGNATURE_ZEROED , LDR_ERROR_RELOCATIONS_OUT_OF_IMAGE , LDR_ERROR_RELOC_BLOCK_INVALID_VA , LDR_ERROR_RELOC_BLOCK_INVALID_LENGTH ,
  LDR_ERROR_RELOC_ENTRY_BAD_TYPE , LDR_ERROR_INMEMORY_IMAGE , LDR_ERROR_MAX
}
 
enum  { PEFILE32 = 32 , PEFILE64 = 64 , PEFILE_UNKNOWN = 0 }
 
enum  : std::uint32_t {
  PELIB_IMAGE_DIRECTORY_ENTRY_EXPORT , PELIB_IMAGE_DIRECTORY_ENTRY_IMPORT , PELIB_IMAGE_DIRECTORY_ENTRY_RESOURCE , PELIB_IMAGE_DIRECTORY_ENTRY_EXCEPTION ,
  PELIB_IMAGE_DIRECTORY_ENTRY_SECURITY , PELIB_IMAGE_DIRECTORY_ENTRY_BASERELOC , PELIB_IMAGE_DIRECTORY_ENTRY_DEBUG , PELIB_IMAGE_DIRECTORY_ENTRY_ARCHITECTURE ,
  PELIB_IMAGE_DIRECTORY_ENTRY_GLOBALPTR , PELIB_IMAGE_DIRECTORY_ENTRY_TLS , PELIB_IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG , PELIB_IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT ,
  PELIB_IMAGE_DIRECTORY_ENTRY_IAT , PELIB_IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT , PELIB_IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR
}
 
enum  : std::uint32_t {
  PELIB_PAGE_NOACCESS = 0x01 , PELIB_PAGE_READONLY = 0x02 , PELIB_PAGE_READWRITE = 0x04 , PELIB_PAGE_WRITECOPY = 0x08 ,
  PELIB_PAGE_EXECUTE = 0x10 , PELIB_PAGE_EXECUTE_READ = 0x20 , PELIB_PAGE_EXECUTE_READWRITE = 0x40 , PELIB_PAGE_EXECUTE_WRITECOPY = 0x80
}
 
enum  : std::uint32_t {
  PELIB_IMAGE_SCN_TYPE_NO_PAD = 0x00000008 , PELIB_IMAGE_SCN_CNT_CODE = 0x00000020 , PELIB_IMAGE_SCN_CNT_INITIALIZED_DATA = 0x00000040 , PELIB_IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x00000080 ,
  PELIB_IMAGE_SCN_LNK_OTHER = 0x00000100 , PELIB_IMAGE_SCN_LNK_INFO = 0x00000200 , PELIB_IMAGE_SCN_LNK_REMOVE = 0x00000800 , PELIB_IMAGE_SCN_LNK_COMDAT = 0x00001000 ,
  PELIB_IMAGE_SCN_NO_DEFER_SPEC_EXC = 0x00004000 , PELIB_IMAGE_SCN_GPREL = 0x00008000 , PELIB_IMAGE_SCN_MEM_FARDATA = 0x00008000 , PELIB_IMAGE_SCN_MEM_PURGEABLE = 0x00020000 ,
  PELIB_IMAGE_SCN_MEM_16BIT = 0x00020000 , PELIB_IMAGE_SCN_MEM_LOCKED = 0x00040000 , PELIB_IMAGE_SCN_MEM_PRELOAD = 0x00080000 , PELIB_IMAGE_SCN_ALIGN_1BYTES = 0x00100000 ,
  PELIB_IMAGE_SCN_ALIGN_2BYTES = 0x00200000 , PELIB_IMAGE_SCN_ALIGN_4BYTES = 0x00300000 , PELIB_IMAGE_SCN_ALIGN_8BYTES = 0x00400000 , PELIB_IMAGE_SCN_ALIGN_16BYTES = 0x00500000 ,
  PELIB_IMAGE_SCN_ALIGN_BYTES = 0x00600000 , PELIB_IMAGE_SCN_ALIGN_64BYTES = 0x00700000 , PELIB_IMAGE_SCN_ALIGN_128BYTES = 0x00800000 , PELIB_IMAGE_SCN_ALIGN_256BYTES = 0x00900000 ,
  PELIB_IMAGE_SCN_ALIGN_512BYTES = 0x00A00000 , PELIB_IMAGE_SCN_ALIGN_1024BYTES = 0x00B00000 , PELIB_IMAGE_SCN_ALIGN_2048BYTES = 0x00C00000 , PELIB_IMAGE_SCN_ALIGN_4096BYTES = 0x00D00000 ,
  PELIB_IMAGE_SCN_ALIGN_8192BYTES = 0x00E00000 , PELIB_IMAGE_SCN_LNK_NRELOC_OVFL = 0x01000000 , PELIB_IMAGE_SCN_MEM_DISCARDABLE = 0x02000000 , PELIB_IMAGE_SCN_MEM_NOT_CACHED = 0x04000000 ,
  PELIB_IMAGE_SCN_MEM_NOT_PAGED = 0x08000000 , PELIB_IMAGE_SCN_MEM_SHARED = 0x10000000 , PELIB_IMAGE_SCN_MEM_EXECUTE = 0x20000000 , PELIB_IMAGE_SCN_MEM_READ = 0x40000000 ,
  PELIB_IMAGE_SCN_MEM_WRITE = 0x80000000U
}
 
enum  PELIB_IMAGE_FILE_MACHINE : std::uint16_t {
  PELIB_IMAGE_FILE_MACHINE_UNKNOWN = 0 , PELIB_IMAGE_FILE_MACHINE_I386 = 0x014C , PELIB_IMAGE_FILE_MACHINE_I486 = 0x014D , PELIB_IMAGE_FILE_MACHINE_PENTIUM = 0x014E ,
  PELIB_IMAGE_FILE_MACHINE_R3000_BIG = 0x0160 , PELIB_IMAGE_FILE_MACHINE_R3000_LITTLE = 0x0162 , PELIB_IMAGE_FILE_MACHINE_R4000 = 0x0166 , PELIB_IMAGE_FILE_MACHINE_R10000 = 0x0168 ,
  PELIB_IMAGE_FILE_MACHINE_WCEMIPSV2 = 0x0169 , PELIB_IMAGE_FILE_MACHINE_ALPHA = 0x0184 , PELIB_IMAGE_FILE_MACHINE_SH3 = 0x01A2 , PELIB_IMAGE_FILE_MACHINE_SH3DSP = 0x01A3 ,
  PELIB_IMAGE_FILE_MACHINE_SH3E = 0x01A4 , PELIB_IMAGE_FILE_MACHINE_SH4 = 0x01A6 , PELIB_IMAGE_FILE_MACHINE_SH5 = 0x01A8 , PELIB_IMAGE_FILE_MACHINE_ARM = 0x01C0 ,
  PELIB_IMAGE_FILE_MACHINE_THUMB = 0x01C2 , PELIB_IMAGE_FILE_MACHINE_ARMNT = 0x01C4 , PELIB_IMAGE_FILE_MACHINE_AM33 = 0x01D3 , PELIB_IMAGE_FILE_MACHINE_POWERPC = 0x01F0 ,
  PELIB_IMAGE_FILE_MACHINE_POWERPCFP = 0x01F1 , PELIB_IMAGE_FILE_MACHINE_IA64 = 0x0200 , PELIB_IMAGE_FILE_MACHINE_MIPS16 = 0x0266 , PELIB_IMAGE_FILE_MACHINE_MOTOROLA68000 = 0x0268 ,
  PELIB_IMAGE_FILE_MACHINE_PARISC = 0x0290 , PELIB_IMAGE_FILE_MACHINE_ALPHA64 = 0x0284 , PELIB_IMAGE_FILE_MACHINE_AXP64 = PELIB_IMAGE_FILE_MACHINE_ALPHA64 , PELIB_IMAGE_FILE_MACHINE_MIPSFPU = 0x0366 ,
  PELIB_IMAGE_FILE_MACHINE_MIPSFPU16 = 0x0466 , PELIB_IMAGE_FILE_MACHINE_TRICORE = 0x0520 , PELIB_IMAGE_FILE_MACHINE_EBC = 0x0EBC , PELIB_IMAGE_FILE_MACHINE_AMD64 = 0x8664 ,
  PELIB_IMAGE_FILE_MACHINE_M32R = 0x9041 , PELIB_IMAGE_FILE_MACHINE_ARM64 = 0xAA64 , PELIB_IMAGE_FILE_MACHINE_MSIL = 0xC0EE
}
 
enum  : std::uint32_t {
  PELIB_IMAGE_FILE_RELOCS_STRIPPED = 0x0001 , PELIB_IMAGE_FILE_EXECUTABLE_IMAGE = 0x0002 , PELIB_IMAGE_FILE_LINE_NUMS_STRIPPED = 0x0004 , PELIB_IMAGE_FILE_LOCAL_SYMS_STRIPPED = 0x0008 ,
  PELIB_IMAGE_FILE_AGGRESSIVE_WS_TRIM = 0x0010 , PELIB_IMAGE_FILE_LARGE_ADDRESS_AWARE = 0x0020 , PELIB_IMAGE_FILE_BYTES_REVERSED_LO = 0x0080 , PELIB_IMAGE_FILE_32BIT_MACHINE = 0x0100 ,
  PELIB_IMAGE_FILE_DEBUG_STRIPPED = 0x0200 , PELIB_IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = 0x0400 , PELIB_IMAGE_FILE_NET_RUN_FROM_SWAP = 0x0800 , PELIB_IMAGE_FILE_SYSTEM = 0x1000 ,
  PELIB_IMAGE_FILE_DLL = 0x2000 , PELIB_IMAGE_FILE_UP_SYSTEM_ONLY = 0x4000 , PELIB_IMAGE_FILE_BYTES_REVERSED_HI = 0x8000
}
 
enum  : std::uint16_t {
  PELIB_IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = 0x0040 , PELIB_IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY = 0x0080 , PELIB_IMAGE_DLLCHARACTERISTICS_NX_COMPAT = 0x0100 , PELIB_IMAGE_DLLCHARACTERISTICS_NO_ISOLATION = 0x0200 ,
  PELIB_IMAGE_DLLCHARACTERISTICS_NO_SEH = 0x0400 , PELIB_IMAGE_DLLCHARACTERISTICS_NO_BIND = 0x0800 , PELIB_IMAGE_DLLCHARACTERISTICS_APPCONTAINER = 0x1000 , PELIB_IMAGE_DLLCHARACTERISTICS_WDM_DRIVER = 0x2000 ,
  PELIB_IMAGE_DLLCHARACTERISTICS_GUARD_CF = 0x4000 , PELIB_IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = 0x8000
}
 
enum  : std::uint16_t { PELIB_IMAGE_NT_OPTIONAL_HDR32_MAGIC = 0x10b , PELIB_IMAGE_NT_OPTIONAL_HDR64_MAGIC = 0x20b , PELIB_IMAGE_ROM_OPTIONAL_HDR_MAGIC = 0x107 }
 
enum  : std::uint16_t {
  PELIB_IMAGE_SUBSYSTEM_UNKNOWN = 0 , PELIB_IMAGE_SUBSYSTEM_NATIVE = 1 , PELIB_IMAGE_SUBSYSTEM_WINDOWS_GUI = 2 , PELIB_IMAGE_SUBSYSTEM_WINDOWS_CUI = 3 ,
  PELIB_IMAGE_SUBSYSTEM_OS2_CUI = 5 , PELIB_IMAGE_SUBSYSTEM_POSIX_CUI = 7 , PELIB_IMAGE_SUBSYSTEM_NATIVE_WINDOWS = 8 , PELIB_IMAGE_SUBSYSTEM_WINDOWS_CE_GUI = 9
}
 
enum  : uint16_t {
  PELIB_IMAGE_REL_BASED_ABSOLUTE = 0 , PELIB_IMAGE_REL_BASED_HIGH = 1 , PELIB_IMAGE_REL_BASED_LOW = 2 , PELIB_IMAGE_REL_BASED_HIGHLOW = 3 ,
  PELIB_IMAGE_REL_BASED_HIGHADJ = 4 , PELIB_IMAGE_REL_BASED_MIPS_JMPADDR = 5 , PELIB_IMAGE_REL_BASED_IA64_IMM64 = 9 , PELIB_IMAGE_REL_BASED_DIR64 = 10
}
 
enum  : std::uint32_t {
  PELIB_RT_CURSOR = 1 , PELIB_RT_BITMAP , PELIB_RT_ICON , PELIB_RT_MENU ,
  PELIB_RT_DIALOG , PELIB_RT_STRING , PELIB_RT_FONTDIR , PELIB_RT_FONT ,
  PELIB_RT_ACCELERATOR , PELIB_RT_RCDATA , PELIB_RT_MESSAGETABLE , PELIB_RT_GROUP_CURSOR ,
  PELIB_RT_GROUP_ICON = 14 , PELIB_RT_VERSION = 16 , PELIB_RT_DLGINCLUDE , PELIB_RT_PLUGPLAY = 19 ,
  PELIB_RT_VXD , PELIB_RT_ANICURSOR , PELIB_RT_ANIICON , PELIB_RT_HTML ,
  PELIB_RT_MANIFEST , PELIB_RT_DLGINIT = 240 , PELIB_RT_TOOLBAR
}
 
enum  : std::uint16_t {
  PELIB_LANG_NEUTRAL = 0x00 , PELIB_LANG_ARABIC = 0x01 , PELIB_LANG_BULGARIAN = 0x02 , PELIB_LANG_CATALAN = 0x03 ,
  PELIB_LANG_CHINESE = 0x04 , PELIB_LANG_CZECH = 0x05 , PELIB_LANG_DANISH = 0x06 , PELIB_LANG_GERMAN = 0x07 ,
  PELIB_LANG_GREEK = 0x08 , PELIB_LANG_ENGLISH = 0x09 , PELIB_LANG_SPANISH = 0x0A , PELIB_LANG_FINNISH = 0x0B ,
  PELIB_LANG_FRENCH = 0x0C , PELIB_LANG_HEBREW = 0x0D , PELIB_LANG_HUNGARIAN = 0x0E , PELIB_LANG_ICELANDIC = 0x0F ,
  PELIB_LANG_ITALIAN = 0x10 , PELIB_LANG_JAPANESE = 0x11 , PELIB_LANG_KOREAN = 0x12 , PELIB_LANG_DUTCH = 0x13 ,
  PELIB_LANG_NORWEGIAN = 0x14 , PELIB_LANG_POLISH = 0x15 , PELIB_LANG_PORTUGUESE = 0x16 , PELIB_LANG_ROMANIAN = 0x18 ,
  PELIB_LANG_RUSSIAN = 0x19 , PELIB_LANG_CROATIAN = 0x1A , PELIB_LANG_SERBIAN_NEUTRAL = 0x7C1A , PELIB_LANG_BOSNIAN_NEUTRAL = 0x781A ,
  PELIB_LANG_SLOVAK = 0x1B , PELIB_LANG_ALBANIAN = 0x1C , PELIB_LANG_SWEDISH = 0x1D , PELIB_LANG_THAI = 0x1E ,
  PELIB_LANG_TURKISH = 0x1F , PELIB_LANG_URDU = 0x20 , PELIB_LANG_INDONESIAN = 0x21 , PELIB_LANG_UKRAINIAN = 0x22 ,
  PELIB_LANG_BELARUSIAN = 0x23 , PELIB_LANG_SLOVENIAN = 0x24 , PELIB_LANG_ESTONIAN = 0x25 , PELIB_LANG_LATVIAN = 0x26 ,
  PELIB_LANG_LITHUANIAN = 0x27 , PELIB_LANG_PERSIAN = 0x29 , PELIB_LANG_VIETNAMESE = 0x2A , PELIB_LANG_ARMENIAN = 0x2B ,
  PELIB_LANG_AZERI = 0x2C , PELIB_LANG_BASQUE = 0x2D , PELIB_LANG_SORBIAN = 0x2E , PELIB_LANG_LOWER_SORBIAN = 0x2E ,
  PELIB_LANG_UPPER_SORBIAN = 0x2E , PELIB_LANG_MACEDONIAN = 0x2F , PELIB_LANG_TSWANA = 0x32 , PELIB_LANG_XHOSA = 0x34 ,
  PELIB_LANG_ZULU = 0x35 , PELIB_LANG_AFRIKAANS = 0x36 , PELIB_LANG_GEORGIAN = 0x37 , PELIB_LANG_FAEROESE = 0x38 ,
  PELIB_LANG_HINDI = 0x39 , PELIB_LANG_MALTESE = 0x3A , PELIB_LANG_SAMI = 0x3B , PELIB_LANG_IRISH = 0x3C ,
  PELIB_LANG_MALAY = 0x3E , PELIB_LANG_KAZAK = 0x3F , PELIB_LANG_KYRGYZ = 0x40 , PELIB_LANG_SWAHILI = 0x41 ,
  PELIB_LANG_UZBEK = 0x43 , PELIB_LANG_TATAR = 0x44 , PELIB_LANG_BENGALI = 0x45 , PELIB_LANG_PUNJABI = 0x46 ,
  PELIB_LANG_GUJARATI = 0x47 , PELIB_LANG_ORIYA = 0x48 , PELIB_LANG_TAMIL = 0x49 , PELIB_LANG_TELUGU = 0x4A ,
  PELIB_LANG_KANNADA = 0x4B , PELIB_LANG_MALAYALAM = 0x4C , PELIB_LANG_ASSAMESE = 0x4D , PELIB_LANG_MARATHI = 0x4E ,
  PELIB_LANG_SANSKRIT = 0x4F , PELIB_LANG_MONGOLIAN = 0x50 , PELIB_LANG_TIBETAN = 0x51 , PELIB_LANG_WELSH = 0x52 ,
  PELIB_LANG_KHMER = 0x53 , PELIB_LANG_LAO = 0x54 , PELIB_LANG_GALICIAN = 0x56 , PELIB_LANG_KONKANI = 0x57 ,
  PELIB_LANG_MANIPURI = 0x58 , PELIB_LANG_SINDHI = 0x59 , PELIB_LANG_SYRIAC = 0x5A , PELIB_LANG_SINHALESE = 0x5B ,
  PELIB_LANG_INUKTITUT = 0x5D , PELIB_LANG_AMHARIC = 0x5E , PELIB_LANG_TAMAZIGHT = 0x5F , PELIB_LANG_KASHMIRI = 0x60 ,
  PELIB_LANG_NEPALI = 0x61 , PELIB_LANG_FRISIAN = 0x62 , PELIB_LANG_PASHTO = 0x63 , PELIB_LANG_FILIPINO = 0x64 ,
  PELIB_LANG_DIVEHI = 0x65 , PELIB_LANG_HAUSA = 0x68 , PELIB_LANG_YORUBA = 0x6A , PELIB_LANG_QUECHUA = 0x6B ,
  PELIB_LANG_SOTHO = 0x6C , PELIB_LANG_BASHKIR = 0x6D , PELIB_LANG_LUXEMBOURGISH = 0x6E , PELIB_LANG_GREENLANDIC = 0x6F ,
  PELIB_LANG_IGBO = 0x70 , PELIB_LANG_TIGRIGNA = 0x73 , PELIB_LANG_YI = 0x78 , PELIB_LANG_MAPUDUNGUN = 0x7A ,
  PELIB_LANG_MOHAWK = 0x7C , PELIB_LANG_BRETON = 0x7E , PELIB_LANG_INVARIANT = 0x7F , PELIB_LANG_UIGHUR = 0x80 ,
  PELIB_LANG_MAORI = 0x81 , PELIB_LANG_OCCITAN = 0x82 , PELIB_LANG_CORSICAN = 0x83 , PELIB_LANG_ALSATIAN = 0x84 ,
  PELIB_LANG_YAKUT = 0x85 , PELIB_LANG_KICHE = 0x86 , PELIB_LANG_KINYARWANDA = 0x87 , PELIB_LANG_WOLOF = 0x88 ,
  PELIB_LANG_DARI = 0x8C , PELIB_LANG_MALAGASY = 0x8D
}
 
enum  { PELIB_WIN_CERT_REVISION_1_0 = 0x100 , PELIB_WIN_CERT_REVISION_2_0 = 0x200 }
 
enum  { PELIB_WIN_CERT_TYPE_X509 = 1 , PELIB_WIN_CERT_TYPE_PKCS_SIGNED_DATA = 2 , PELIB_WIN_CERT_TYPE_RESERVED_1 = 3 , PELIB_WIN_CERT_TYPE_TS_STACK_SIGNED = 4 }
 

Functions

bool hasValidOriginalFirstThunk (const PELIB_IMAGE_IMPORT_DESCRIPTOR &impDesc, const ImageLoader &imageLoader)
 
bool isInvalidOrdinal (std::uint64_t ordinal, std::uint64_t ordinalMask, std::uint64_t sizeOfImage)
 
bool isBadImportName (const std::string &importName)
 
template<typename T >
unsigned int accumulate (unsigned int size, const T &v)
 
bool isEqualNc (const std::string &s1, const std::string &s2)
 
std::uint32_t BytesToPages (std::uint32_t ByteSize)
 
std::uint32_t AlignToSize (std::uint32_t ByteSize, std::uint32_t AlignSize)
 
std::uint64_t fileSize (const std::string &filename)
 
std::uint64_t fileSize (std::istream &stream)
 
std::uint64_t fileSize (std::ofstream &file)
 
std::uint64_t fileSize (std::fstream &file)
 
unsigned int alignOffset (unsigned int uiOffset, unsigned int uiAlignment)
 
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)
 
const char * getLoaderErrorString (LoaderError ldrError, bool userFriendly=false)
 
bool getLoaderErrorLoadableAnyway (LoaderError ldrError)
 
bool pelibIsPrintableChar (int ch)
 

Variables

const std::uint32_t BuildNumberXP = 2600
 
const std::uint32_t BuildNumberVista = 6000
 
const std::uint32_t BuildNumber7 = 7600
 
const std::uint32_t BuildNumber8 = 9200
 
const std::uint32_t BuildNumber10 = 10240
 
const std::uint32_t BuildNumberMask = 0x0FFFF
 
const std::uint32_t BuildNumber64Bit = 0x10000
 
const std::uint16_t PELIB_IMAGE_DOS_SIGNATURE = 0x5A4D
 
const std::uint32_t PELIB_PAGE_SIZE = 0x1000
 
const std::uint32_t PELIB_PAGE_SIZE_SHIFT = 12
 
const std::uint32_t PELIB_SIZE_64KB = 0x10000
 
const std::uint32_t PELIB_SIZE_10MB = 0xA00000
 
const std::uint32_t PELIB_IMAGE_NT_SIGNATURE = 0x00004550
 
const std::uint32_t PELIB_MM_SIZE_OF_LARGEST_IMAGE = 0x77000000
 
const std::uint32_t PELIB_MAX_TLS_CALLBACKS = 0x100
 
const std::uint32_t PELIB_MAX_IMPORT_DLLS = 0x100
 
const std::uint32_t PELIB_MAX_IMPORTED_FUNCTIONS = 0x1000
 
const std::uint32_t PELIB_MAX_EXPORTED_FUNCTIONS = 0x1000
 
const std::uint32_t PE_MAX_SECTION_COUNT_XP = 96
 
const std::uint32_t PE_MAX_SECTION_COUNT_7 = 192
 
const std::uint32_t PELIB_SECTOR_SIZE = 0x200
 
const std::uint32_t PELIB_IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16
 
const std::uint32_t PELIB_IMAGE_RESOURCE_DATA_IS_DIRECTORY = 0x80000000
 
const std::uint32_t PELIB_IMAGE_RESOURCE_NAME_IS_STRING = 0x80000000
 
const std::uint32_t PELIB_IMAGE_RESOURCE_RVA_MASK = 0x7FFFFFFF
 
const std::uint16_t PELIB_MAX_RESOURCE_ENTRIES = 0x8000
 
const unsigned int PELIB_IMAGE_SIZEOF_SHORT_NAME = 8
 
const unsigned int PELIB_IMAGE_SIZEOF_MAX_NAME = 1024
 
const unsigned int PELIB_IMAGE_SIZEOF_BASE_RELOCATION = 8
 
const std::size_t IMPORT_LIBRARY_MAX_LENGTH = 96
 
const std::size_t IMPORT_SYMBOL_MAX_LENGTH = 96
 
const unsigned int PELIB_IMAGE_SIZEOF_COFF_SYMBOL = 18
 
const std::size_t COFF_SYMBOL_NAME_MAX_LENGTH = 96
 
const std::uint32_t PELIB_DELAY_ATTRIBUTE_V2 = 0x01
 
static const std::vector< LoaderErrorInfoLdrErrStrings
 
const std::vector< std::string > productNames
 
const std::vector< std::string > visualStudioNames
 
const std::vector< std::string > visualStudioNames2
 
const std::unordered_map< size_t, std::pair< size_t, std::string > > visualStudioVersionMap
 

Typedef Documentation

◆ ByteBuffer

typedef std::vector<std::uint8_t> PeLib::ByteBuffer

◆ PFN_COMPARE_CALLBACK

typedef bool(* PeLib::PFN_COMPARE_CALLBACK) (struct PELIB_IMAGE_COMPARE *pImgCompare, size_t BytesCompared, size_t BytesTotal)

◆ PFN_VERIFY_ADDRESS

typedef bool(* PeLib::PFN_VERIFY_ADDRESS) (void *ptr, size_t length)

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
PEFILE32 
PEFILE64 
PEFILE_UNKNOWN 

◆ anonymous enum

anonymous enum : std::uint32_t
Enumerator
PELIB_IMAGE_DIRECTORY_ENTRY_EXPORT 
PELIB_IMAGE_DIRECTORY_ENTRY_IMPORT 
PELIB_IMAGE_DIRECTORY_ENTRY_RESOURCE 
PELIB_IMAGE_DIRECTORY_ENTRY_EXCEPTION 
PELIB_IMAGE_DIRECTORY_ENTRY_SECURITY 
PELIB_IMAGE_DIRECTORY_ENTRY_BASERELOC 
PELIB_IMAGE_DIRECTORY_ENTRY_DEBUG 
PELIB_IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 
PELIB_IMAGE_DIRECTORY_ENTRY_GLOBALPTR 
PELIB_IMAGE_DIRECTORY_ENTRY_TLS 
PELIB_IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 
PELIB_IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 
PELIB_IMAGE_DIRECTORY_ENTRY_IAT 
PELIB_IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 
PELIB_IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 

◆ anonymous enum

anonymous enum : std::uint32_t
Enumerator
PELIB_PAGE_NOACCESS 
PELIB_PAGE_READONLY 
PELIB_PAGE_READWRITE 
PELIB_PAGE_WRITECOPY 
PELIB_PAGE_EXECUTE 
PELIB_PAGE_EXECUTE_READ 
PELIB_PAGE_EXECUTE_READWRITE 
PELIB_PAGE_EXECUTE_WRITECOPY 

◆ anonymous enum

anonymous enum : std::uint32_t
Enumerator
PELIB_IMAGE_SCN_TYPE_NO_PAD 
PELIB_IMAGE_SCN_CNT_CODE 
PELIB_IMAGE_SCN_CNT_INITIALIZED_DATA 
PELIB_IMAGE_SCN_CNT_UNINITIALIZED_DATA 
PELIB_IMAGE_SCN_LNK_OTHER 
PELIB_IMAGE_SCN_LNK_INFO 
PELIB_IMAGE_SCN_LNK_REMOVE 
PELIB_IMAGE_SCN_LNK_COMDAT 
PELIB_IMAGE_SCN_NO_DEFER_SPEC_EXC 
PELIB_IMAGE_SCN_GPREL 
PELIB_IMAGE_SCN_MEM_FARDATA 
PELIB_IMAGE_SCN_MEM_PURGEABLE 
PELIB_IMAGE_SCN_MEM_16BIT 
PELIB_IMAGE_SCN_MEM_LOCKED 
PELIB_IMAGE_SCN_MEM_PRELOAD 
PELIB_IMAGE_SCN_ALIGN_1BYTES 
PELIB_IMAGE_SCN_ALIGN_2BYTES 
PELIB_IMAGE_SCN_ALIGN_4BYTES 
PELIB_IMAGE_SCN_ALIGN_8BYTES 
PELIB_IMAGE_SCN_ALIGN_16BYTES 
PELIB_IMAGE_SCN_ALIGN_BYTES 
PELIB_IMAGE_SCN_ALIGN_64BYTES 
PELIB_IMAGE_SCN_ALIGN_128BYTES 
PELIB_IMAGE_SCN_ALIGN_256BYTES 
PELIB_IMAGE_SCN_ALIGN_512BYTES 
PELIB_IMAGE_SCN_ALIGN_1024BYTES 
PELIB_IMAGE_SCN_ALIGN_2048BYTES 
PELIB_IMAGE_SCN_ALIGN_4096BYTES 
PELIB_IMAGE_SCN_ALIGN_8192BYTES 
PELIB_IMAGE_SCN_LNK_NRELOC_OVFL 
PELIB_IMAGE_SCN_MEM_DISCARDABLE 
PELIB_IMAGE_SCN_MEM_NOT_CACHED 
PELIB_IMAGE_SCN_MEM_NOT_PAGED 
PELIB_IMAGE_SCN_MEM_SHARED 
PELIB_IMAGE_SCN_MEM_EXECUTE 
PELIB_IMAGE_SCN_MEM_READ 
PELIB_IMAGE_SCN_MEM_WRITE 

◆ anonymous enum

anonymous enum : std::uint32_t
Enumerator
PELIB_IMAGE_FILE_RELOCS_STRIPPED 
PELIB_IMAGE_FILE_EXECUTABLE_IMAGE 
PELIB_IMAGE_FILE_LINE_NUMS_STRIPPED 
PELIB_IMAGE_FILE_LOCAL_SYMS_STRIPPED 
PELIB_IMAGE_FILE_AGGRESSIVE_WS_TRIM 
PELIB_IMAGE_FILE_LARGE_ADDRESS_AWARE 
PELIB_IMAGE_FILE_BYTES_REVERSED_LO 
PELIB_IMAGE_FILE_32BIT_MACHINE 
PELIB_IMAGE_FILE_DEBUG_STRIPPED 
PELIB_IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 
PELIB_IMAGE_FILE_NET_RUN_FROM_SWAP 
PELIB_IMAGE_FILE_SYSTEM 
PELIB_IMAGE_FILE_DLL 
PELIB_IMAGE_FILE_UP_SYSTEM_ONLY 
PELIB_IMAGE_FILE_BYTES_REVERSED_HI 

◆ anonymous enum

anonymous enum : std::uint16_t
Enumerator
PELIB_IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 
PELIB_IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 
PELIB_IMAGE_DLLCHARACTERISTICS_NX_COMPAT 
PELIB_IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 
PELIB_IMAGE_DLLCHARACTERISTICS_NO_SEH 
PELIB_IMAGE_DLLCHARACTERISTICS_NO_BIND 
PELIB_IMAGE_DLLCHARACTERISTICS_APPCONTAINER 
PELIB_IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 
PELIB_IMAGE_DLLCHARACTERISTICS_GUARD_CF 
PELIB_IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 

◆ anonymous enum

anonymous enum : std::uint16_t
Enumerator
PELIB_IMAGE_NT_OPTIONAL_HDR32_MAGIC 
PELIB_IMAGE_NT_OPTIONAL_HDR64_MAGIC 
PELIB_IMAGE_ROM_OPTIONAL_HDR_MAGIC 

◆ anonymous enum

anonymous enum : std::uint16_t
Enumerator
PELIB_IMAGE_SUBSYSTEM_UNKNOWN 
PELIB_IMAGE_SUBSYSTEM_NATIVE 
PELIB_IMAGE_SUBSYSTEM_WINDOWS_GUI 
PELIB_IMAGE_SUBSYSTEM_WINDOWS_CUI 
PELIB_IMAGE_SUBSYSTEM_OS2_CUI 
PELIB_IMAGE_SUBSYSTEM_POSIX_CUI 
PELIB_IMAGE_SUBSYSTEM_NATIVE_WINDOWS 
PELIB_IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 

◆ anonymous enum

anonymous enum : uint16_t
Enumerator
PELIB_IMAGE_REL_BASED_ABSOLUTE 
PELIB_IMAGE_REL_BASED_HIGH 
PELIB_IMAGE_REL_BASED_LOW 
PELIB_IMAGE_REL_BASED_HIGHLOW 
PELIB_IMAGE_REL_BASED_HIGHADJ 
PELIB_IMAGE_REL_BASED_MIPS_JMPADDR 
PELIB_IMAGE_REL_BASED_IA64_IMM64 
PELIB_IMAGE_REL_BASED_DIR64 

◆ anonymous enum

anonymous enum : std::uint32_t
Enumerator
PELIB_RT_CURSOR 
PELIB_RT_BITMAP 
PELIB_RT_ICON 
PELIB_RT_MENU 
PELIB_RT_DIALOG 
PELIB_RT_STRING 
PELIB_RT_FONTDIR 
PELIB_RT_FONT 
PELIB_RT_ACCELERATOR 
PELIB_RT_RCDATA 
PELIB_RT_MESSAGETABLE 
PELIB_RT_GROUP_CURSOR 
PELIB_RT_GROUP_ICON 
PELIB_RT_VERSION 
PELIB_RT_DLGINCLUDE 
PELIB_RT_PLUGPLAY 
PELIB_RT_VXD 
PELIB_RT_ANICURSOR 
PELIB_RT_ANIICON 
PELIB_RT_HTML 
PELIB_RT_MANIFEST 
PELIB_RT_DLGINIT 
PELIB_RT_TOOLBAR 

◆ anonymous enum

anonymous enum : std::uint16_t
Enumerator
PELIB_LANG_NEUTRAL 
PELIB_LANG_ARABIC 
PELIB_LANG_BULGARIAN 
PELIB_LANG_CATALAN 
PELIB_LANG_CHINESE 
PELIB_LANG_CZECH 
PELIB_LANG_DANISH 
PELIB_LANG_GERMAN 
PELIB_LANG_GREEK 
PELIB_LANG_ENGLISH 
PELIB_LANG_SPANISH 
PELIB_LANG_FINNISH 
PELIB_LANG_FRENCH 
PELIB_LANG_HEBREW 
PELIB_LANG_HUNGARIAN 
PELIB_LANG_ICELANDIC 
PELIB_LANG_ITALIAN 
PELIB_LANG_JAPANESE 
PELIB_LANG_KOREAN 
PELIB_LANG_DUTCH 
PELIB_LANG_NORWEGIAN 
PELIB_LANG_POLISH 
PELIB_LANG_PORTUGUESE 
PELIB_LANG_ROMANIAN 
PELIB_LANG_RUSSIAN 
PELIB_LANG_CROATIAN 
PELIB_LANG_SERBIAN_NEUTRAL 
PELIB_LANG_BOSNIAN_NEUTRAL 
PELIB_LANG_SLOVAK 
PELIB_LANG_ALBANIAN 
PELIB_LANG_SWEDISH 
PELIB_LANG_THAI 
PELIB_LANG_TURKISH 
PELIB_LANG_URDU 
PELIB_LANG_INDONESIAN 
PELIB_LANG_UKRAINIAN 
PELIB_LANG_BELARUSIAN 
PELIB_LANG_SLOVENIAN 
PELIB_LANG_ESTONIAN 
PELIB_LANG_LATVIAN 
PELIB_LANG_LITHUANIAN 
PELIB_LANG_PERSIAN 
PELIB_LANG_VIETNAMESE 
PELIB_LANG_ARMENIAN 
PELIB_LANG_AZERI 
PELIB_LANG_BASQUE 
PELIB_LANG_SORBIAN 
PELIB_LANG_LOWER_SORBIAN 
PELIB_LANG_UPPER_SORBIAN 
PELIB_LANG_MACEDONIAN 
PELIB_LANG_TSWANA 
PELIB_LANG_XHOSA 
PELIB_LANG_ZULU 
PELIB_LANG_AFRIKAANS 
PELIB_LANG_GEORGIAN 
PELIB_LANG_FAEROESE 
PELIB_LANG_HINDI 
PELIB_LANG_MALTESE 
PELIB_LANG_SAMI 
PELIB_LANG_IRISH 
PELIB_LANG_MALAY 
PELIB_LANG_KAZAK 
PELIB_LANG_KYRGYZ 
PELIB_LANG_SWAHILI 
PELIB_LANG_UZBEK 
PELIB_LANG_TATAR 
PELIB_LANG_BENGALI 
PELIB_LANG_PUNJABI 
PELIB_LANG_GUJARATI 
PELIB_LANG_ORIYA 
PELIB_LANG_TAMIL 
PELIB_LANG_TELUGU 
PELIB_LANG_KANNADA 
PELIB_LANG_MALAYALAM 
PELIB_LANG_ASSAMESE 
PELIB_LANG_MARATHI 
PELIB_LANG_SANSKRIT 
PELIB_LANG_MONGOLIAN 
PELIB_LANG_TIBETAN 
PELIB_LANG_WELSH 
PELIB_LANG_KHMER 
PELIB_LANG_LAO 
PELIB_LANG_GALICIAN 
PELIB_LANG_KONKANI 
PELIB_LANG_MANIPURI 
PELIB_LANG_SINDHI 
PELIB_LANG_SYRIAC 
PELIB_LANG_SINHALESE 
PELIB_LANG_INUKTITUT 
PELIB_LANG_AMHARIC 
PELIB_LANG_TAMAZIGHT 
PELIB_LANG_KASHMIRI 
PELIB_LANG_NEPALI 
PELIB_LANG_FRISIAN 
PELIB_LANG_PASHTO 
PELIB_LANG_FILIPINO 
PELIB_LANG_DIVEHI 
PELIB_LANG_HAUSA 
PELIB_LANG_YORUBA 
PELIB_LANG_QUECHUA 
PELIB_LANG_SOTHO 
PELIB_LANG_BASHKIR 
PELIB_LANG_LUXEMBOURGISH 
PELIB_LANG_GREENLANDIC 
PELIB_LANG_IGBO 
PELIB_LANG_TIGRIGNA 
PELIB_LANG_YI 
PELIB_LANG_MAPUDUNGUN 
PELIB_LANG_MOHAWK 
PELIB_LANG_BRETON 
PELIB_LANG_INVARIANT 
PELIB_LANG_UIGHUR 
PELIB_LANG_MAORI 
PELIB_LANG_OCCITAN 
PELIB_LANG_CORSICAN 
PELIB_LANG_ALSATIAN 
PELIB_LANG_YAKUT 
PELIB_LANG_KICHE 
PELIB_LANG_KINYARWANDA 
PELIB_LANG_WOLOF 
PELIB_LANG_DARI 
PELIB_LANG_MALAGASY 

◆ anonymous enum

anonymous enum
Enumerator
PELIB_WIN_CERT_REVISION_1_0 
PELIB_WIN_CERT_REVISION_2_0 

◆ anonymous enum

anonymous enum
Enumerator
PELIB_WIN_CERT_TYPE_X509 
PELIB_WIN_CERT_TYPE_PKCS_SIGNED_DATA 
PELIB_WIN_CERT_TYPE_RESERVED_1 
PELIB_WIN_CERT_TYPE_TS_STACK_SIGNED 

◆ currdir

Parameter for functions that can operate on the OLDDIR or new import directory.

Enumerator
OLDDIR 
NEWDIR 

◆ errorCodes

Enumerator
ERROR_NONE 
ERROR_OPENING_FILE 
ERROR_INVALID_FILE 
ERROR_TOO_MANY_SECTIONS 
ERROR_NOT_ENOUGH_SPACE 
ERROR_NO_FILE_ALIGNMENT 
ERROR_NO_SECTION_ALIGNMENT 
ERROR_ENTRY_NOT_FOUND 
ERROR_DUPLICATE_ENTRY 
ERROR_DIRECTORY_DOES_NOT_EXIST 
ERROR_COFF_SYMBOL_TABLE_DOES_NOT_EXIST 

◆ LoaderError

Enumerator
LDR_ERROR_NONE 
LDR_ERROR_FILE_TOO_BIG 
LDR_ERROR_E_LFANEW_UNALIGNED 
LDR_ERROR_E_LFANEW_OUT_OF_FILE 
LDR_ERROR_NTHEADER_OFFSET_OVERFLOW 
LDR_ERROR_NTHEADER_OUT_OF_FILE 
LDR_ERROR_NO_NT_SIGNATURE 
LDR_ERROR_FILE_HEADER_INVALID 
LDR_ERROR_IMAGE_NON_EXECUTABLE 
LDR_ERROR_NO_OPTHDR_MAGIC 
LDR_ERROR_SIZE_OF_HEADERS_ZERO 
LDR_ERROR_FILE_ALIGNMENT_ZERO 
LDR_ERROR_FILE_ALIGNMENT_NOT_POW2 
LDR_ERROR_SECTION_ALIGNMENT_ZERO 
LDR_ERROR_SECTION_ALIGNMENT_NOT_POW2 
LDR_ERROR_SECTION_ALIGNMENT_TOO_SMALL 
LDR_ERROR_SECTION_ALIGNMENT_INVALID 
LDR_ERROR_SIZE_OF_IMAGE_TOO_BIG 
LDR_ERROR_INVALID_MACHINE32 
LDR_ERROR_INVALID_MACHINE64 
LDR_ERROR_SIZE_OF_HEADERS_INVALID 
LDR_ERROR_SIZE_OF_OPTHDR_NOT_ALIGNED 
LDR_ERROR_SIZE_OF_IMAGE_ZERO 
LDR_ERROR_IMAGE_BASE_NOT_ALIGNED 
LDR_ERROR_SIZE_OF_IMAGE_PTES_ZERO 
LDR_ERROR_RAW_DATA_OVERFLOW 
LDR_ERROR_SECTION_HEADERS_OUT_OF_IMAGE 
LDR_ERROR_SECTION_HEADERS_OVERFLOW 
LDR_ERROR_SECTION_SIZE_MISMATCH 
LDR_ERROR_INVALID_SECTION_VA 
LDR_ERROR_INVALID_SECTION_VSIZE 
LDR_ERROR_INVALID_SECTION_RAWSIZE 
LDR_ERROR_INVALID_SIZE_OF_IMAGE 
LDR_ERROR_FILE_IS_CUT 
LDR_ERROR_FILE_IS_CUT_LOADABLE 
LDR_ERROR_IMPDIR_OUT_OF_FILE 
LDR_ERROR_IMPDIR_CUT 
LDR_ERROR_IMPDIR_COUNT_EXCEEDED 
LDR_ERROR_IMPDIR_NAME_RVA_INVALID 
LDR_ERROR_IMPDIR_THUNK_RVA_INVALID 
LDR_ERROR_IMPDIR_IMPORT_COUNT_EXCEEDED 
LDR_ERROR_RSRC_OVER_END_OF_IMAGE 
LDR_ERROR_RSRC_NAME_OUT_OF_IMAGE 
LDR_ERROR_RSRC_DATA_OUT_OF_IMAGE 
LDR_ERROR_RSRC_SUBDIR_OUT_OF_IMAGE 
LDR_ERROR_ENTRY_POINT_OUT_OF_IMAGE 
LDR_ERROR_ENTRY_POINT_ZEROED 
LDR_ERROR_DIGITAL_SIGNATURE_CUT 
LDR_ERROR_DIGITAL_SIGNATURE_ZEROED 
LDR_ERROR_RELOCATIONS_OUT_OF_IMAGE 
LDR_ERROR_RELOC_BLOCK_INVALID_VA 
LDR_ERROR_RELOC_BLOCK_INVALID_LENGTH 
LDR_ERROR_RELOC_ENTRY_BAD_TYPE 
LDR_ERROR_INMEMORY_IMAGE 
LDR_ERROR_MAX 

◆ PELIB_COMPARE_RESULT

enum PeLib::PELIB_COMPARE_RESULT : std::uint32_t
strong
Enumerator
ImagesEqual 
ImagesWindowsLoadedWeDidnt 
ImagesWindowsDidntLoadWeDid 
ImagesDifferentSize 
ImagesDifferentPageAccess 
ImagesDifferentPageValue 
ImagesInvalidPageInImage 
ImagesCompareInvalid 

◆ PELIB_IMAGE_FILE_MACHINE

enum PeLib::PELIB_IMAGE_FILE_MACHINE : std::uint16_t
Enumerator
PELIB_IMAGE_FILE_MACHINE_UNKNOWN 
PELIB_IMAGE_FILE_MACHINE_I386 
PELIB_IMAGE_FILE_MACHINE_I486 
PELIB_IMAGE_FILE_MACHINE_PENTIUM 
PELIB_IMAGE_FILE_MACHINE_R3000_BIG 
PELIB_IMAGE_FILE_MACHINE_R3000_LITTLE 
PELIB_IMAGE_FILE_MACHINE_R4000 
PELIB_IMAGE_FILE_MACHINE_R10000 
PELIB_IMAGE_FILE_MACHINE_WCEMIPSV2 
PELIB_IMAGE_FILE_MACHINE_ALPHA 
PELIB_IMAGE_FILE_MACHINE_SH3 
PELIB_IMAGE_FILE_MACHINE_SH3DSP 
PELIB_IMAGE_FILE_MACHINE_SH3E 
PELIB_IMAGE_FILE_MACHINE_SH4 
PELIB_IMAGE_FILE_MACHINE_SH5 
PELIB_IMAGE_FILE_MACHINE_ARM 
PELIB_IMAGE_FILE_MACHINE_THUMB 
PELIB_IMAGE_FILE_MACHINE_ARMNT 
PELIB_IMAGE_FILE_MACHINE_AM33 
PELIB_IMAGE_FILE_MACHINE_POWERPC 
PELIB_IMAGE_FILE_MACHINE_POWERPCFP 
PELIB_IMAGE_FILE_MACHINE_IA64 
PELIB_IMAGE_FILE_MACHINE_MIPS16 
PELIB_IMAGE_FILE_MACHINE_MOTOROLA68000 
PELIB_IMAGE_FILE_MACHINE_PARISC 
PELIB_IMAGE_FILE_MACHINE_ALPHA64 
PELIB_IMAGE_FILE_MACHINE_AXP64 
PELIB_IMAGE_FILE_MACHINE_MIPSFPU 
PELIB_IMAGE_FILE_MACHINE_MIPSFPU16 
PELIB_IMAGE_FILE_MACHINE_TRICORE 
PELIB_IMAGE_FILE_MACHINE_EBC 
PELIB_IMAGE_FILE_MACHINE_AMD64 
PELIB_IMAGE_FILE_MACHINE_M32R 
PELIB_IMAGE_FILE_MACHINE_ARM64 
PELIB_IMAGE_FILE_MACHINE_MSIL 

◆ PELIB_MEMBER_TYPE

enum PeLib::PELIB_MEMBER_TYPE : std::uint32_t
strong
Enumerator
OPTHDR_sizeof 
OPTHDR_sizeof_fixed 
OPTHDR_NumberOfRvaAndSizes 
OPTHDR_DataDirectory 
OPTHDR_DataDirectory_EXPORT_Rva 
OPTHDR_DataDirectory_RSRC_Rva 
OPTHDR_DataDirectory_TLS_Rva 
OPTHDR_DataDirectory_CONFIG_Rva 

Function Documentation

◆ accumulate()

template<typename T >
unsigned int PeLib::accumulate ( unsigned int  size,
const T &  v 
)

◆ alignOffset()

unsigned int PeLib::alignOffset ( unsigned int  uiOffset,
unsigned int  uiAlignment 
)

◆ AlignToSize()

std::uint32_t PeLib::AlignToSize ( std::uint32_t  ByteSize,
std::uint32_t  AlignSize 
)

◆ BytesToPages()

std::uint32_t PeLib::BytesToPages ( std::uint32_t  ByteSize)

◆ fileSize() [1/4]

std::uint64_t PeLib::fileSize ( const std::string &  filename)

◆ fileSize() [2/4]

std::uint64_t PeLib::fileSize ( std::fstream &  file)

◆ fileSize() [3/4]

std::uint64_t PeLib::fileSize ( std::istream &  stream)

◆ fileSize() [4/4]

std::uint64_t PeLib::fileSize ( std::ofstream &  file)

◆ getLoaderErrorLoadableAnyway()

bool PeLib::getLoaderErrorLoadableAnyway ( LoaderError  ldrError)

◆ getLoaderErrorString()

const char * PeLib::getLoaderErrorString ( LoaderError  ldrError,
bool  userFriendly = false 
)

◆ getStringFromFileOffset()

std::size_t PeLib::getStringFromFileOffset ( std::istream &  stream,
std::string &  result,
std::size_t  fileOffset,
std::size_t  maxLength,
bool  isPrintable,
bool  isNotTooLong 
)
Parameters
stream
result
fileOffset
maxLengthMaximum length of the string to get.
isPrintableIf true and a non-printable characters is read, set result to an empty string and return 0.
isNotTooLongIf true and maxLength is reached, set result to an empty string and return 0.
Returns
Length of the result string.

◆ hasValidOriginalFirstThunk()

bool PeLib::hasValidOriginalFirstThunk ( const PELIB_IMAGE_IMPORT_DESCRIPTOR impDesc,
const ImageLoader imageLoader 
)
inline

Returns whether OriginalFirstThunk of specified import descriptor is valid with a given PE header. OriginalFirstThunk is valid if it has value higher than file alignment and its RVA can be translated to some offset in the file.

Parameters
impDescImport descriptor.
imageLoaderReference to image loader.
Returns
True if valid, otherwise false.

◆ isBadImportName()

bool PeLib::isBadImportName ( const std::string &  importName)
inline

◆ isEqualNc()

bool PeLib::isEqualNc ( const std::string &  s1,
const std::string &  s2 
)

◆ isInvalidOrdinal()

bool PeLib::isInvalidOrdinal ( std::uint64_t  ordinal,
std::uint64_t  ordinalMask,
std::uint64_t  sizeOfImage 
)
inline

◆ pelibIsPrintableChar()

bool PeLib::pelibIsPrintableChar ( int  ch)

Variable Documentation

◆ BuildNumber10

const std::uint32_t PeLib::BuildNumber10 = 10240

◆ BuildNumber64Bit

const std::uint32_t PeLib::BuildNumber64Bit = 0x10000

◆ BuildNumber7

const std::uint32_t PeLib::BuildNumber7 = 7600

◆ BuildNumber8

const std::uint32_t PeLib::BuildNumber8 = 9200

◆ BuildNumberMask

const std::uint32_t PeLib::BuildNumberMask = 0x0FFFF

◆ BuildNumberVista

const std::uint32_t PeLib::BuildNumberVista = 6000

◆ BuildNumberXP

const std::uint32_t PeLib::BuildNumberXP = 2600

◆ COFF_SYMBOL_NAME_MAX_LENGTH

const std::size_t PeLib::COFF_SYMBOL_NAME_MAX_LENGTH = 96

◆ IMPORT_LIBRARY_MAX_LENGTH

const std::size_t PeLib::IMPORT_LIBRARY_MAX_LENGTH = 96

◆ IMPORT_SYMBOL_MAX_LENGTH

const std::size_t PeLib::IMPORT_SYMBOL_MAX_LENGTH = 96

◆ LdrErrStrings

const std::vector<LoaderErrorInfo> PeLib::LdrErrStrings
static

◆ PE_MAX_SECTION_COUNT_7

const std::uint32_t PeLib::PE_MAX_SECTION_COUNT_7 = 192

◆ PE_MAX_SECTION_COUNT_XP

const std::uint32_t PeLib::PE_MAX_SECTION_COUNT_XP = 96

◆ PELIB_DELAY_ATTRIBUTE_V2

const std::uint32_t PeLib::PELIB_DELAY_ATTRIBUTE_V2 = 0x01

◆ PELIB_IMAGE_DOS_SIGNATURE

const std::uint16_t PeLib::PELIB_IMAGE_DOS_SIGNATURE = 0x5A4D

◆ PELIB_IMAGE_NT_SIGNATURE

const std::uint32_t PeLib::PELIB_IMAGE_NT_SIGNATURE = 0x00004550

◆ PELIB_IMAGE_NUMBEROF_DIRECTORY_ENTRIES

const std::uint32_t PeLib::PELIB_IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16

◆ PELIB_IMAGE_RESOURCE_DATA_IS_DIRECTORY

const std::uint32_t PeLib::PELIB_IMAGE_RESOURCE_DATA_IS_DIRECTORY = 0x80000000

◆ PELIB_IMAGE_RESOURCE_NAME_IS_STRING

const std::uint32_t PeLib::PELIB_IMAGE_RESOURCE_NAME_IS_STRING = 0x80000000

◆ PELIB_IMAGE_RESOURCE_RVA_MASK

const std::uint32_t PeLib::PELIB_IMAGE_RESOURCE_RVA_MASK = 0x7FFFFFFF

◆ PELIB_IMAGE_SIZEOF_BASE_RELOCATION

const unsigned int PeLib::PELIB_IMAGE_SIZEOF_BASE_RELOCATION = 8

◆ PELIB_IMAGE_SIZEOF_COFF_SYMBOL

const unsigned int PeLib::PELIB_IMAGE_SIZEOF_COFF_SYMBOL = 18

◆ PELIB_IMAGE_SIZEOF_MAX_NAME

const unsigned int PeLib::PELIB_IMAGE_SIZEOF_MAX_NAME = 1024

◆ PELIB_IMAGE_SIZEOF_SHORT_NAME

const unsigned int PeLib::PELIB_IMAGE_SIZEOF_SHORT_NAME = 8

◆ PELIB_MAX_EXPORTED_FUNCTIONS

const std::uint32_t PeLib::PELIB_MAX_EXPORTED_FUNCTIONS = 0x1000

◆ PELIB_MAX_IMPORT_DLLS

const std::uint32_t PeLib::PELIB_MAX_IMPORT_DLLS = 0x100

◆ PELIB_MAX_IMPORTED_FUNCTIONS

const std::uint32_t PeLib::PELIB_MAX_IMPORTED_FUNCTIONS = 0x1000

◆ PELIB_MAX_RESOURCE_ENTRIES

const std::uint16_t PeLib::PELIB_MAX_RESOURCE_ENTRIES = 0x8000

◆ PELIB_MAX_TLS_CALLBACKS

const std::uint32_t PeLib::PELIB_MAX_TLS_CALLBACKS = 0x100

◆ PELIB_MM_SIZE_OF_LARGEST_IMAGE

const std::uint32_t PeLib::PELIB_MM_SIZE_OF_LARGEST_IMAGE = 0x77000000

◆ PELIB_PAGE_SIZE

const std::uint32_t PeLib::PELIB_PAGE_SIZE = 0x1000

◆ PELIB_PAGE_SIZE_SHIFT

const std::uint32_t PeLib::PELIB_PAGE_SIZE_SHIFT = 12

◆ PELIB_SECTOR_SIZE

const std::uint32_t PeLib::PELIB_SECTOR_SIZE = 0x200

◆ PELIB_SIZE_10MB

const std::uint32_t PeLib::PELIB_SIZE_10MB = 0xA00000

◆ PELIB_SIZE_64KB

const std::uint32_t PeLib::PELIB_SIZE_64KB = 0x10000

◆ productNames

const std::vector<std::string> PeLib::productNames

◆ visualStudioNames

const std::vector<std::string> PeLib::visualStudioNames
Initial value:
=
{
".NET Framework",
".NET Core",
"Visual Studio 5.0 CvtRes.exe",
"Visual C++ 5.0",
"Visual Studio 6.0",
"Visual Basic 6.0",
"Visual C++ 6.0",
"Visual Studio 6.0 MASM",
"Visual C++ 2002",
"Visual C++ 2003",
"Visual Studio 2005",
"Visual Studio 2008",
"Visual Studio 2010",
"Visual C++ 2012",
"Visual Studio 2012 MASM",
"Visual C++ 2013",
"Visual Studio 2013",
"Visual C++ 2015",
"Visual Studio 2015",
"Visual C++ 2017",
"Visual Studio 2017",
"Visual C++ 2019",
"Visual Studio 2019"
}

◆ visualStudioNames2

const std::vector<std::string> PeLib::visualStudioNames2
Initial value:
=
{
"Visual Studio 2003 v7.10",
"Visual Studio 2005 v8.0",
"Visual Studio 2008 v9.0",
"",
"Visual Studio 2010 v10.0",
"Visual Studio 2010 v10.10",
"Visual Studio 2012 v11.0",
"Visual Studio 2013 v12.0",
"Visual Studio 2013 v12.10",
"Visual Studio 2015+"
}

◆ visualStudioVersionMap

const std::unordered_map<size_t, std::pair<size_t, std::string> > PeLib::visualStudioVersionMap