LIEF/api/python/MachO/pyMachOStructures.cpp

170 lines
9.3 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 "pyMachO.hpp"
#include "LIEF/MachO/Structures.hpp"
#include "LIEF/MachO/EnumToString.hpp"
#define PY_ENUM(x) LIEF::MachO::to_string(x), x
void init_MachO_Structures_enum(py::module& m) {
py::enum_<LIEF::MachO::CPU_TYPES>(m, "CPU_TYPES")
.value(PY_ENUM(LIEF::MachO::CPU_TYPES::CPU_TYPE_ANY))
.value(PY_ENUM(LIEF::MachO::CPU_TYPES::CPU_TYPE_X86))
.value(PY_ENUM(LIEF::MachO::CPU_TYPES::CPU_TYPE_I386))
.value(PY_ENUM(LIEF::MachO::CPU_TYPES::CPU_TYPE_X86_64))
.value(PY_ENUM(LIEF::MachO::CPU_TYPES::CPU_TYPE_MC98000))
.value(PY_ENUM(LIEF::MachO::CPU_TYPES::CPU_TYPE_ARM))
.value(PY_ENUM(LIEF::MachO::CPU_TYPES::CPU_TYPE_ARM64))
.value(PY_ENUM(LIEF::MachO::CPU_TYPES::CPU_TYPE_SPARC))
.value(PY_ENUM(LIEF::MachO::CPU_TYPES::CPU_TYPE_POWERPC))
.value(PY_ENUM(LIEF::MachO::CPU_TYPES::CPU_TYPE_POWERPC64))
.export_values();
py::enum_<LIEF::MachO::MACHO_TYPES>(m, "MACHO_TYPES")
.value(PY_ENUM(LIEF::MachO::MACHO_TYPES::MH_MAGIC))
.value(PY_ENUM(LIEF::MachO::MACHO_TYPES::MH_CIGAM))
.value(PY_ENUM(LIEF::MachO::MACHO_TYPES::MH_MAGIC_64))
.value(PY_ENUM(LIEF::MachO::MACHO_TYPES::MH_CIGAM_64))
.value(PY_ENUM(LIEF::MachO::MACHO_TYPES::FAT_MAGIC))
.value(PY_ENUM(LIEF::MachO::MACHO_TYPES::FAT_CIGAM))
.export_values();
2017-03-30 16:56:49 +02:00
py::enum_<LIEF::MachO::FILE_TYPES>(m, "FILE_TYPES")
.value(PY_ENUM(LIEF::MachO::FILE_TYPES::MH_OBJECT))
.value(PY_ENUM(LIEF::MachO::FILE_TYPES::MH_EXECUTE))
.value(PY_ENUM(LIEF::MachO::FILE_TYPES::MH_FVMLIB))
.value(PY_ENUM(LIEF::MachO::FILE_TYPES::MH_CORE))
.value(PY_ENUM(LIEF::MachO::FILE_TYPES::MH_PRELOAD))
.value(PY_ENUM(LIEF::MachO::FILE_TYPES::MH_DYLIB))
.value(PY_ENUM(LIEF::MachO::FILE_TYPES::MH_DYLINKER))
.value(PY_ENUM(LIEF::MachO::FILE_TYPES::MH_BUNDLE))
.value(PY_ENUM(LIEF::MachO::FILE_TYPES::MH_DYLIB_STUB))
.value(PY_ENUM(LIEF::MachO::FILE_TYPES::MH_DSYM))
.value(PY_ENUM(LIEF::MachO::FILE_TYPES::MH_KEXT_BUNDLE))
.export_values();
py::enum_<LIEF::MachO::HEADER_FLAGS>(m, "HEADER_FLAGS")
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_NOUNDEFS))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_INCRLINK))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_DYLDLINK))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_BINDATLOAD))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_PREBOUND))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_SPLIT_SEGS))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_LAZY_INIT))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_TWOLEVEL))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_FORCE_FLAT))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_NOMULTIDEFS))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_NOFIXPREBINDING))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_PREBINDABLE))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_ALLMODSBOUND))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_SUBSECTIONS_VIA_SYMBOLS))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_CANONICAL))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_WEAK_DEFINES))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_BINDS_TO_WEAK))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_ALLOW_STACK_EXECUTION))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_ROOT_SAFE))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_SETUID_SAFE))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_NO_REEXPORTED_DYLIBS))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_PIE))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_DEAD_STRIPPABLE_DYLIB))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_HAS_TLV_DESCRIPTORS))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_NO_HEAP_EXECUTION))
.value(PY_ENUM(LIEF::MachO::HEADER_FLAGS::MH_APP_EXTENSION_SAFE))
.export_values();
py::enum_<LIEF::MachO::LOAD_COMMAND_TYPES>(m, "LOAD_COMMAND_TYPES")
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_SEGMENT))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_SYMTAB))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_SYMSEG))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_THREAD))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_UNIXTHREAD))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_LOADFVMLIB))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_IDFVMLIB))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_IDENT))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_FVMFILE))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_PREPAGE))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_DYSYMTAB))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_LOAD_DYLIB))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_ID_DYLIB))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_LOAD_DYLINKER))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_ID_DYLINKER))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_PREBOUND_DYLIB))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_ROUTINES))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_SUB_FRAMEWORK))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_SUB_UMBRELLA))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_SUB_CLIENT))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_SUB_LIBRARY))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_TWOLEVEL_HINTS))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_PREBIND_CKSUM))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_LOAD_WEAK_DYLIB))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_SEGMENT_64))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_ROUTINES_64))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_UUID))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_RPATH))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_CODE_SIGNATURE))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_SEGMENT_SPLIT_INFO))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_REEXPORT_DYLIB))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_LAZY_LOAD_DYLIB))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_ENCRYPTION_INFO))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_DYLD_INFO))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_DYLD_INFO_ONLY))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_LOAD_UPWARD_DYLIB))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_VERSION_MIN_MACOSX))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_VERSION_MIN_IPHONEOS))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_FUNCTION_STARTS))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_DYLD_ENVIRONMENT))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_MAIN))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_DATA_IN_CODE))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_SOURCE_VERSION))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_DYLIB_CODE_SIGN_DRS))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_ENCRYPTION_INFO_64))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_LINKER_OPTION))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_LINKER_OPTIMIZATION_HINT))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_VERSION_MIN_TVOS))
.value(PY_ENUM(LIEF::MachO::LOAD_COMMAND_TYPES::LC_VERSION_MIN_WATCHOS))
.export_values();
py::enum_<LIEF::MachO::SECTION_TYPES>(m, "SECTION_TYPES")
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_REGULAR))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_ZEROFILL))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_CSTRING_LITERALS))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_4BYTE_LITERALS))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_8BYTE_LITERALS))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_LITERAL_POINTERS))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_NON_LAZY_SYMBOL_POINTERS))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_LAZY_SYMBOL_POINTERS))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_SYMBOL_STUBS))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_MOD_INIT_FUNC_POINTERS))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_MOD_TERM_FUNC_POINTERS))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_COALESCED))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_GB_ZEROFILL))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_INTERPOSING))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_16BYTE_LITERALS))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_DTRACE_DOF))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_LAZY_DYLIB_SYMBOL_POINTERS))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_THREAD_LOCAL_REGULAR))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_THREAD_LOCAL_ZEROFILL))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_THREAD_LOCAL_VARIABLES))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_THREAD_LOCAL_VARIABLE_POINTERS))
.value(PY_ENUM(LIEF::MachO::SECTION_TYPES::S_THREAD_LOCAL_INIT_FUNCTION_POINTERS))
.export_values();
}