LIEF/api/python/PE/pyPEStructures.cpp

278 lines
16 KiB
C++
Raw Normal View History

2017-03-30 16:56:49 +02:00
/* Copyright 2017 R. Thomas
* Copyright 2017 Quarkslab
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "pyPE.hpp"
#include "LIEF/PE/Structures.hpp"
#include "LIEF/PE/EnumToString.hpp"
#define PY_ENUM(x) LIEF::PE::to_string(x), x
void init_PE_Structures_enum(py::module& m) {
py::enum_<LIEF::PE::PE_TYPE>(m, "PE_TYPE")
.value(PY_ENUM(LIEF::PE::PE_TYPE::PE32))
.value(PY_ENUM(LIEF::PE::PE_TYPE::PE32_PLUS))
.export_values();
py::enum_<LIEF::PE::MACHINE_TYPES>(m, "MACHINE_TYPES")
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::MT_Invalid))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_UNKNOWN))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_AM33))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_AMD64))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_ARM))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_ARMNT))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_EBC))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_I386))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_IA64))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_M32R))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_MIPS16))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_MIPSFPU))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_MIPSFPU16))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_POWERPC))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_POWERPCFP))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_R4000))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_SH3))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_SH3DSP))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_SH4))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_SH5))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_THUMB))
.value(PY_ENUM(LIEF::PE::MACHINE_TYPES::IMAGE_FILE_MACHINE_WCEMIPSV2))
.export_values();
2017-04-26 09:27:56 +02:00
py::enum_<LIEF::PE::HEADER_CHARACTERISTICS>(m, "HEADER_CHARACTERISTICS")
2017-03-30 16:56:49 +02:00
.value(PY_ENUM(LIEF::PE::HEADER_CHARACTERISTICS::IMAGE_FILE_RELOCS_STRIPPED))
.value(PY_ENUM(LIEF::PE::HEADER_CHARACTERISTICS::IMAGE_FILE_EXECUTABLE_IMAGE))
.value(PY_ENUM(LIEF::PE::HEADER_CHARACTERISTICS::IMAGE_FILE_LINE_NUMS_STRIPPED))
.value(PY_ENUM(LIEF::PE::HEADER_CHARACTERISTICS::IMAGE_FILE_LOCAL_SYMS_STRIPPED))
.value(PY_ENUM(LIEF::PE::HEADER_CHARACTERISTICS::IMAGE_FILE_AGGRESSIVE_WS_TRIM))
.value(PY_ENUM(LIEF::PE::HEADER_CHARACTERISTICS::IMAGE_FILE_LARGE_ADDRESS_AWARE))
.value(PY_ENUM(LIEF::PE::HEADER_CHARACTERISTICS::IMAGE_FILE_BYTES_REVERSED_LO))
.value(PY_ENUM(LIEF::PE::HEADER_CHARACTERISTICS::IMAGE_FILE_32BIT_MACHINE))
.value(PY_ENUM(LIEF::PE::HEADER_CHARACTERISTICS::IMAGE_FILE_DEBUG_STRIPPED))
.value(PY_ENUM(LIEF::PE::HEADER_CHARACTERISTICS::IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP))
.value(PY_ENUM(LIEF::PE::HEADER_CHARACTERISTICS::IMAGE_FILE_NET_RUN_FROM_SWAP))
.value(PY_ENUM(LIEF::PE::HEADER_CHARACTERISTICS::IMAGE_FILE_SYSTEM))
.value(PY_ENUM(LIEF::PE::HEADER_CHARACTERISTICS::IMAGE_FILE_DLL))
.value(PY_ENUM(LIEF::PE::HEADER_CHARACTERISTICS::IMAGE_FILE_UP_SYSTEM_ONLY))
.value(PY_ENUM(LIEF::PE::HEADER_CHARACTERISTICS::IMAGE_FILE_BYTES_REVERSED_HI))
.export_values();
py::enum_<LIEF::PE::SUBSYSTEM>(m, "SUBSYSTEM")
.value(PY_ENUM(LIEF::PE::SUBSYSTEM::IMAGE_SUBSYSTEM_UNKNOWN))
.value(PY_ENUM(LIEF::PE::SUBSYSTEM::IMAGE_SUBSYSTEM_NATIVE))
.value(PY_ENUM(LIEF::PE::SUBSYSTEM::IMAGE_SUBSYSTEM_WINDOWS_GUI))
.value(PY_ENUM(LIEF::PE::SUBSYSTEM::IMAGE_SUBSYSTEM_WINDOWS_CUI))
.value(PY_ENUM(LIEF::PE::SUBSYSTEM::IMAGE_SUBSYSTEM_OS2_CUI))
.value(PY_ENUM(LIEF::PE::SUBSYSTEM::IMAGE_SUBSYSTEM_POSIX_CUI))
.value(PY_ENUM(LIEF::PE::SUBSYSTEM::IMAGE_SUBSYSTEM_NATIVE_WINDOWS))
.value(PY_ENUM(LIEF::PE::SUBSYSTEM::IMAGE_SUBSYSTEM_WINDOWS_CE_GUI))
.value(PY_ENUM(LIEF::PE::SUBSYSTEM::IMAGE_SUBSYSTEM_EFI_APPLICATION))
.value(PY_ENUM(LIEF::PE::SUBSYSTEM::IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER))
.value(PY_ENUM(LIEF::PE::SUBSYSTEM::IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER))
.value(PY_ENUM(LIEF::PE::SUBSYSTEM::IMAGE_SUBSYSTEM_EFI_ROM))
.value(PY_ENUM(LIEF::PE::SUBSYSTEM::IMAGE_SUBSYSTEM_XBOX))
.value(PY_ENUM(LIEF::PE::SUBSYSTEM::IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION))
.export_values();
py::enum_<LIEF::PE::DATA_DIRECTORY>(m, "DATA_DIRECTORY")
.value(PY_ENUM(LIEF::PE::DATA_DIRECTORY::EXPORT_TABLE))
.value(PY_ENUM(LIEF::PE::DATA_DIRECTORY::IMPORT_TABLE))
.value(PY_ENUM(LIEF::PE::DATA_DIRECTORY::RESOURCE_TABLE))
.value(PY_ENUM(LIEF::PE::DATA_DIRECTORY::EXCEPTION_TABLE))
.value(PY_ENUM(LIEF::PE::DATA_DIRECTORY::CERTIFICATE_TABLE))
.value(PY_ENUM(LIEF::PE::DATA_DIRECTORY::BASE_RELOCATION_TABLE))
.value(PY_ENUM(LIEF::PE::DATA_DIRECTORY::DEBUG))
.value(PY_ENUM(LIEF::PE::DATA_DIRECTORY::ARCHITECTURE))
.value(PY_ENUM(LIEF::PE::DATA_DIRECTORY::GLOBAL_PTR))
.value(PY_ENUM(LIEF::PE::DATA_DIRECTORY::TLS_TABLE))
.value(PY_ENUM(LIEF::PE::DATA_DIRECTORY::LOAD_CONFIG_TABLE))
.value(PY_ENUM(LIEF::PE::DATA_DIRECTORY::BOUND_IMPORT))
.value(PY_ENUM(LIEF::PE::DATA_DIRECTORY::IAT))
.value(PY_ENUM(LIEF::PE::DATA_DIRECTORY::DELAY_IMPORT_DESCRIPTOR))
.value(PY_ENUM(LIEF::PE::DATA_DIRECTORY::CLR_RUNTIME_HEADER))
.export_values();
py::enum_<LIEF::PE::DLL_CHARACTERISTICS>(m, "DLL_CHARACTERISTICS")
.value(PY_ENUM(LIEF::PE::DLL_CHARACTERISTICS::IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA))
.value(PY_ENUM(LIEF::PE::DLL_CHARACTERISTICS::IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE))
.value(PY_ENUM(LIEF::PE::DLL_CHARACTERISTICS::IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY))
.value(PY_ENUM(LIEF::PE::DLL_CHARACTERISTICS::IMAGE_DLL_CHARACTERISTICS_NX_COMPAT))
.value(PY_ENUM(LIEF::PE::DLL_CHARACTERISTICS::IMAGE_DLL_CHARACTERISTICS_NO_ISOLATION))
.value(PY_ENUM(LIEF::PE::DLL_CHARACTERISTICS::IMAGE_DLL_CHARACTERISTICS_NO_SEH))
.value(PY_ENUM(LIEF::PE::DLL_CHARACTERISTICS::IMAGE_DLL_CHARACTERISTICS_NO_BIND))
.value(PY_ENUM(LIEF::PE::DLL_CHARACTERISTICS::IMAGE_DLL_CHARACTERISTICS_APPCONTAINER))
.value(PY_ENUM(LIEF::PE::DLL_CHARACTERISTICS::IMAGE_DLL_CHARACTERISTICS_WDM_DRIVER))
.value(PY_ENUM(LIEF::PE::DLL_CHARACTERISTICS::IMAGE_DLL_CHARACTERISTICS_GUARD_CF))
.value(PY_ENUM(LIEF::PE::DLL_CHARACTERISTICS::IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE))
.export_values();
py::enum_<LIEF::PE::SECTION_CHARACTERISTICS>(m, "SECTION_CHARACTERISTICS")
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_TYPE_NO_PAD))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_CNT_CODE))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_CNT_INITIALIZED_DATA))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_CNT_UNINITIALIZED_DATA))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_LNK_OTHER))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_LNK_INFO))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_LNK_REMOVE))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_LNK_COMDAT))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_GPREL))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_MEM_PURGEABLE))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_MEM_16BIT))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_MEM_LOCKED))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_MEM_PRELOAD))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_ALIGN_1BYTES))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_ALIGN_2BYTES))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_ALIGN_4BYTES))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_ALIGN_8BYTES))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_ALIGN_16BYTES))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_ALIGN_32BYTES))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_ALIGN_64BYTES))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_ALIGN_128BYTES))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_ALIGN_256BYTES))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_ALIGN_512BYTES))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_ALIGN_1024BYTES))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_ALIGN_2048BYTES))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_ALIGN_4096BYTES))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_ALIGN_8192BYTES))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_LNK_NRELOC_OVFL))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_MEM_DISCARDABLE))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_MEM_NOT_CACHED))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_MEM_NOT_PAGED))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_MEM_SHARED))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_MEM_EXECUTE))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_MEM_READ))
.value(PY_ENUM(LIEF::PE::SECTION_CHARACTERISTICS::IMAGE_SCN_MEM_WRITE))
.export_values();
py::enum_<LIEF::PE::SECTION_TYPES>(m, "SECTION_TYPES")
.value(PY_ENUM(LIEF::PE::SECTION_TYPES::TEXT))
.value(PY_ENUM(LIEF::PE::SECTION_TYPES::TLS))
.value(PY_ENUM(LIEF::PE::SECTION_TYPES::IMPORT))
.value(PY_ENUM(LIEF::PE::SECTION_TYPES::DATA))
.value(PY_ENUM(LIEF::PE::SECTION_TYPES::BSS))
.value(PY_ENUM(LIEF::PE::SECTION_TYPES::RESOURCE))
.value(PY_ENUM(LIEF::PE::SECTION_TYPES::RELOCATION))
.value(PY_ENUM(LIEF::PE::SECTION_TYPES::EXPORT))
.value(PY_ENUM(LIEF::PE::SECTION_TYPES::UNKNOWN))
.export_values();
py::enum_<LIEF::PE::SYMBOL_BASE_TYPES>(m, "SYMBOL_BASE_TYPES")
.value(PY_ENUM(LIEF::PE::SYMBOL_BASE_TYPES::IMAGE_SYM_TYPE_NULL))
.value(PY_ENUM(LIEF::PE::SYMBOL_BASE_TYPES::IMAGE_SYM_TYPE_VOID))
.value(PY_ENUM(LIEF::PE::SYMBOL_BASE_TYPES::IMAGE_SYM_TYPE_CHAR))
.value(PY_ENUM(LIEF::PE::SYMBOL_BASE_TYPES::IMAGE_SYM_TYPE_SHORT))
.value(PY_ENUM(LIEF::PE::SYMBOL_BASE_TYPES::IMAGE_SYM_TYPE_INT))
.value(PY_ENUM(LIEF::PE::SYMBOL_BASE_TYPES::IMAGE_SYM_TYPE_LONG))
.value(PY_ENUM(LIEF::PE::SYMBOL_BASE_TYPES::IMAGE_SYM_TYPE_FLOAT))
.value(PY_ENUM(LIEF::PE::SYMBOL_BASE_TYPES::IMAGE_SYM_TYPE_DOUBLE))
.value(PY_ENUM(LIEF::PE::SYMBOL_BASE_TYPES::IMAGE_SYM_TYPE_STRUCT))
.value(PY_ENUM(LIEF::PE::SYMBOL_BASE_TYPES::IMAGE_SYM_TYPE_UNION))
.value(PY_ENUM(LIEF::PE::SYMBOL_BASE_TYPES::IMAGE_SYM_TYPE_ENUM))
.value(PY_ENUM(LIEF::PE::SYMBOL_BASE_TYPES::IMAGE_SYM_TYPE_MOE))
.value(PY_ENUM(LIEF::PE::SYMBOL_BASE_TYPES::IMAGE_SYM_TYPE_BYTE))
.value(PY_ENUM(LIEF::PE::SYMBOL_BASE_TYPES::IMAGE_SYM_TYPE_WORD))
.value(PY_ENUM(LIEF::PE::SYMBOL_BASE_TYPES::IMAGE_SYM_TYPE_UINT))
.value(PY_ENUM(LIEF::PE::SYMBOL_BASE_TYPES::IMAGE_SYM_TYPE_DWORD))
.export_values();
py::enum_<LIEF::PE::SYMBOL_COMPLEX_TYPES>(m, "SYMBOL_COMPLEX_TYPES")
.value(PY_ENUM(LIEF::PE::SYMBOL_COMPLEX_TYPES::IMAGE_SYM_DTYPE_NULL))
.value(PY_ENUM(LIEF::PE::SYMBOL_COMPLEX_TYPES::IMAGE_SYM_DTYPE_POINTER))
.value(PY_ENUM(LIEF::PE::SYMBOL_COMPLEX_TYPES::IMAGE_SYM_DTYPE_FUNCTION))
.value(PY_ENUM(LIEF::PE::SYMBOL_COMPLEX_TYPES::IMAGE_SYM_DTYPE_ARRAY))
.value(PY_ENUM(LIEF::PE::SYMBOL_COMPLEX_TYPES::SCT_COMPLEX_TYPE_SHIFT))
.export_values();
py::enum_<LIEF::PE::SYMBOL_SECTION_NUMBER>(m, "SYMBOL_SECTION_NUMBER")
.value(PY_ENUM(LIEF::PE::SYMBOL_SECTION_NUMBER::IMAGE_SYM_DEBUG))
.value(PY_ENUM(LIEF::PE::SYMBOL_SECTION_NUMBER::IMAGE_SYM_ABSOLUTE))
.value(PY_ENUM(LIEF::PE::SYMBOL_SECTION_NUMBER::IMAGE_SYM_UNDEFINED))
.export_values();
py::enum_<LIEF::PE::SYMBOL_STORAGE_CLASS>(m, "SYMBOL_STORAGE_CLASS")
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_END_OF_FUNCTION))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_NULL))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_AUTOMATIC))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_EXTERNAL))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_STATIC))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_REGISTER))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_EXTERNAL_DEF))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_LABEL))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_UNDEFINED_LABEL))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_MEMBER_OF_STRUCT))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_UNION_TAG))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_TYPE_DEFINITION))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_UNDEFINED_STATIC))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_ENUM_TAG))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_MEMBER_OF_ENUM))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_REGISTER_PARAM))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_BIT_FIELD))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_BLOCK))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_FUNCTION))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_END_OF_STRUCT))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_FILE))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_SECTION))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_WEAK_EXTERNAL))
.value(PY_ENUM(LIEF::PE::SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_CLR_TOKEN))
.export_values();
py::enum_<LIEF::PE::RELOCATIONS_BASE_TYPES>(m, "RELOCATIONS_BASE_TYPES")
.value(PY_ENUM(LIEF::PE::RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_ABSOLUTE))
.value(PY_ENUM(LIEF::PE::RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_HIGH))
.value(PY_ENUM(LIEF::PE::RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_LOW))
.value(PY_ENUM(LIEF::PE::RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_HIGHLOW))
.value(PY_ENUM(LIEF::PE::RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_HIGHADJ))
.value(PY_ENUM(LIEF::PE::RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_MIPS_JMPADDR))
.value(PY_ENUM(LIEF::PE::RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_SECTION))
.value(PY_ENUM(LIEF::PE::RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_REL))
.value(PY_ENUM(LIEF::PE::RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_MIPS_JMPADDR16))
.value(PY_ENUM(LIEF::PE::RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_IA64_IMM64))
.value(PY_ENUM(LIEF::PE::RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_DIR64))
.value(PY_ENUM(LIEF::PE::RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_HIGH3ADJ))
.export_values();
py::enum_<LIEF::PE::DEBUG_TYPES>(m, "DEBUG_TYPES")
.value(PY_ENUM(LIEF::PE::DEBUG_TYPES::IMAGE_DEBUG_TYPE_UNKNOWN))
.value(PY_ENUM(LIEF::PE::DEBUG_TYPES::IMAGE_DEBUG_TYPE_COFF))
.value(PY_ENUM(LIEF::PE::DEBUG_TYPES::IMAGE_DEBUG_TYPE_CODEVIEW))
.value(PY_ENUM(LIEF::PE::DEBUG_TYPES::IMAGE_DEBUG_TYPE_FPO))
.value(PY_ENUM(LIEF::PE::DEBUG_TYPES::IMAGE_DEBUG_TYPE_MISC))
.value(PY_ENUM(LIEF::PE::DEBUG_TYPES::IMAGE_DEBUG_TYPE_EXCEPTION))
.value(PY_ENUM(LIEF::PE::DEBUG_TYPES::IMAGE_DEBUG_TYPE_FIXUP))
.value(PY_ENUM(LIEF::PE::DEBUG_TYPES::IMAGE_DEBUG_TYPE_OMAP_TO_SRC))
.value(PY_ENUM(LIEF::PE::DEBUG_TYPES::IMAGE_DEBUG_TYPE_OMAP_FROM_SRC))
.value(PY_ENUM(LIEF::PE::DEBUG_TYPES::IMAGE_DEBUG_TYPE_BORLAND))
.value(PY_ENUM(LIEF::PE::DEBUG_TYPES::IMAGE_DEBUG_TYPE_CLSID))
.export_values();
}