mirror of
https://github.com/QuasarApp/LIEF.git
synced 2025-04-27 12:54:32 +00:00
Use Frozen for static const containers.
Thanks to https://github.com/serge-sans-paille/frozen By default, Frozen is used if the compiler support C++14. It can be disabled by using the "LIEF_DISABLE_FROZEN" option during the CMake configuration step
This commit is contained in:
parent
8660060064
commit
262af07311
@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.1)
|
||||
cmake_minimum_required(VERSION 3.6)
|
||||
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
|
||||
@ -25,6 +25,9 @@ message(STATUS "${PROJECT_NAME} ${PROJECT_VERSION}")
|
||||
# =============
|
||||
include(LIEFOptions)
|
||||
|
||||
# Compiler detection (C++14, C++17, ...)
|
||||
include(LIEFCompilerDetection)
|
||||
|
||||
# CCACHE
|
||||
# ======
|
||||
find_program(CCACHE_FOUND ccache)
|
||||
@ -98,7 +101,9 @@ set(LIEF_INC_FILES
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/Visitor.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/visitor_macros.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/BinaryStream/BinaryStream.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/BinaryStream/VectorStream.hpp")
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/BinaryStream/VectorStream.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/frozen.hpp"
|
||||
)
|
||||
|
||||
set(LIEF_VISITOR_INCLUDE_FILES
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/hash.hpp")
|
||||
@ -131,6 +136,10 @@ add_library(LIB_LIEF_SHARED SHARED ${LIBLIEF_SOURCE_FILES} ${LIEF_INCLUDE_FILES}
|
||||
|
||||
target_compile_definitions(LIB_LIEF_STATIC PRIVATE -DLIEF_STATIC)
|
||||
target_compile_definitions(LIB_LIEF_SHARED PRIVATE -DLIEF_EXPORTS)
|
||||
if (LIEF_SUPPORT_CXX14)
|
||||
target_compile_features(LIB_LIEF_STATIC PRIVATE cxx_std_14)
|
||||
target_compile_features(LIB_LIEF_SHARED PRIVATE cxx_std_14)
|
||||
endif()
|
||||
|
||||
# Abstract part
|
||||
include("${CMAKE_CURRENT_SOURCE_DIR}/src/Abstract/CMakeLists.txt")
|
||||
@ -177,6 +186,11 @@ else()
|
||||
add_definitions(-DELPP_DISABLE_DEFAULT_CRASH_HANDLING)
|
||||
endif()
|
||||
|
||||
# Frozen Configuration
|
||||
# ====================
|
||||
if (LIEF_FROZEN_ENABLED)
|
||||
list(APPEND LIEF_PRIVATE_INCLUDE_DIR "${FROZEN_INCLUDE_DIR}")
|
||||
endif()
|
||||
|
||||
# LIEF includes
|
||||
# =============
|
||||
@ -202,8 +216,10 @@ list(APPEND LIEF_PRIVATE_INCLUDE_DIR
|
||||
"${LIEF_PUBLIC_INCLUDE_DIR}"
|
||||
"${LIBRANG_SOURCE_DIR}/include"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src"
|
||||
"${CMAKE_BINARY_DIR}"
|
||||
"${ELG_SOURCE_DIR}"
|
||||
"${MBEDTLS_INCLUDE_DIRS}")
|
||||
"${MBEDTLS_INCLUDE_DIRS}"
|
||||
)
|
||||
|
||||
|
||||
# Grouping external projects
|
||||
@ -212,7 +228,7 @@ source_group("mbedtls\\crypto" FILES ${mbedtls_src_crypto})
|
||||
source_group("mbedtls\\x509" FILES ${mbedtls_src_x509})
|
||||
source_group("mbedtls\\tls" FILES ${mbedtls_src_tls})
|
||||
if (LIEF_LOGGING)
|
||||
source_group("easylogging" FILES ${ELG_SOURCE_DIR}/easylogging++.cc)
|
||||
source_group("easylogging" FILES ${ELG_SOURCE_DIR}/easylogging++.cc)
|
||||
endif()
|
||||
|
||||
# Library definition
|
||||
@ -236,6 +252,11 @@ if (LIEF_LOGGING)
|
||||
add_dependencies(LIB_LIEF_SHARED lief_easyloggingpp)
|
||||
endif()
|
||||
|
||||
if (LIEF_FROZEN_ENABLED)
|
||||
add_dependencies(LIB_LIEF_STATIC lief_frozen)
|
||||
add_dependencies(LIB_LIEF_SHARED lief_frozen)
|
||||
endif()
|
||||
|
||||
add_dependencies(LIB_LIEF_STATIC lief_rang_cpp_color)
|
||||
add_dependencies(LIB_LIEF_SHARED lief_rang_cpp_color)
|
||||
|
||||
|
27
cmake/LIEFCompilerDetection.cmake
Normal file
27
cmake/LIEFCompilerDetection.cmake
Normal file
@ -0,0 +1,27 @@
|
||||
if(__add_lief_compiler_detection)
|
||||
return()
|
||||
endif()
|
||||
set(__add_lief_compiler_detection ON)
|
||||
|
||||
set(LIEF_SUPPORT_CXX11 0)
|
||||
set(LIEF_SUPPORT_CXX14 0)
|
||||
set(LIEF_SUPPORT_CXX17 0)
|
||||
|
||||
if (cxx_std_11 IN_LIST CMAKE_CXX_COMPILE_FEATURES)
|
||||
set(LIEF_SUPPORT_CXX11 1)
|
||||
endif()
|
||||
|
||||
if (cxx_std_14 IN_LIST CMAKE_CXX_COMPILE_FEATURES)
|
||||
set(LIEF_SUPPORT_CXX14 1)
|
||||
endif()
|
||||
|
||||
if (cxx_std_17 IN_LIST CMAKE_CXX_COMPILE_FEATURES)
|
||||
set(LIEF_SUPPORT_CXX17 1)
|
||||
endif()
|
||||
|
||||
configure_file(
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/compiler_support.h.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/compiler_support.h"
|
||||
@ONLY
|
||||
)
|
||||
|
@ -225,3 +225,26 @@ if (LIEF_FUZZING)
|
||||
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/fuzzing")
|
||||
endif()
|
||||
|
||||
|
||||
# Frozen
|
||||
# ------
|
||||
set(LIEF_FROZEN_ENABLED 0)
|
||||
|
||||
if (LIEF_SUPPORT_CXX14 AND NOT LIEF_DISABLE_FROZEN)
|
||||
message(STATUS "Enable Frozen (C++14 support)")
|
||||
set(LIEF_FROZEN_ENABLED 1)
|
||||
set(FROZEN_VERSION 2f608b5)
|
||||
set(FROZEN_SHA256 SHA256=e72a59976beb55f4d608d195745b9fbd51f8bcff20a23060b18f20a46873bddf)
|
||||
set(FROZEN_URL "${THIRD_PARTY_DIRECTORY}/frozen-${FROZEN_VERSION}.zip" CACHE STRING "URL to Frozen")
|
||||
ExternalProject_Add(lief_frozen
|
||||
URL ${FROZEN_URL}
|
||||
URL_HASH ${FROZEN_SHA256}
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND ""
|
||||
UPDATE_COMMAND ""
|
||||
INSTALL_COMMAND "")
|
||||
|
||||
ExternalProject_get_property(lief_frozen SOURCE_DIR)
|
||||
set(FROZEN_INCLUDE_DIR "${SOURCE_DIR}/include")
|
||||
endif()
|
||||
|
||||
|
@ -16,6 +16,8 @@ option(LIEF_EXTRA_WARNINGS "Enable extra warning from the compiler" OFF)
|
||||
option(LIEF_LOGGING "Enable logging" ON)
|
||||
option(LIEF_ENABLE_JSON "Enable JSON-related APIs" ON)
|
||||
|
||||
option(LIEF_DISABLE_FROZEN "Disable Frozen even if it is supported" OFF)
|
||||
|
||||
option(LIEF_ELF "Build LIEF with ELF module" ON)
|
||||
option(LIEF_PE "Build LIEF with PE module" ON)
|
||||
option(LIEF_MACHO "Build LIEF with MachO module" ON)
|
||||
|
@ -35,7 +35,9 @@ class LIEF_API Header : public Object {
|
||||
|
||||
public:
|
||||
using identity_t = std::array<uint8_t, 16>;
|
||||
using abstract_architecture_t = std::pair<ARCHITECTURES, std::set<MODES>>;
|
||||
|
||||
public:
|
||||
Header(void);
|
||||
Header(const Elf32_Ehdr *header);
|
||||
Header(const Elf64_Ehdr *header);
|
||||
@ -55,7 +57,9 @@ class LIEF_API Header : public Object {
|
||||
ARCH machine_type(void) const;
|
||||
|
||||
//! @brief LIEF abstract architecture
|
||||
std::pair<ARCHITECTURES, std::set<MODES>> abstract_architecture(void) const;
|
||||
//!
|
||||
//! Empty it can't be abstracted
|
||||
abstract_architecture_t abstract_architecture(void) const;
|
||||
|
||||
//! @brief LIEF abstract endianness
|
||||
ENDIANNESS abstract_endianness(void) const;
|
||||
|
@ -69,6 +69,8 @@ class LIEF_API Relocation : public LIEF::Relocation {
|
||||
RELOCATION_PURPOSES purpose(void) const;
|
||||
|
||||
//! @brief Return the **bit** size of the value to patch
|
||||
//!
|
||||
//! Return -1 if it fails
|
||||
virtual size_t size(void) const override;
|
||||
|
||||
bool has_symbol(void) const;
|
||||
|
@ -37,4 +37,8 @@
|
||||
#define LIEF_LOGGING_SUPPORT
|
||||
#endif
|
||||
|
||||
#if @LIEF_FROZEN_ENABLED@
|
||||
#define LIEF_FROZEN_ENABLED
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -14,12 +14,12 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
#include "LIEF/Abstract/EnumToString.hpp"
|
||||
#include <map>
|
||||
#include "frozen.hpp"
|
||||
|
||||
namespace LIEF {
|
||||
|
||||
const char* to_string(EXE_FORMATS e) {
|
||||
const std::map<EXE_FORMATS, const char*> enumStrings {
|
||||
CONST_MAP(EXE_FORMATS, const char*, 4) enumStrings {
|
||||
{ EXE_FORMATS::FORMAT_UNKNOWN, "UNKNOWN" },
|
||||
{ EXE_FORMATS::FORMAT_ELF, "ELF" },
|
||||
{ EXE_FORMATS::FORMAT_PE, "PE" },
|
||||
@ -30,7 +30,7 @@ const char* to_string(EXE_FORMATS e) {
|
||||
}
|
||||
|
||||
const char* to_string(OBJECT_TYPES e) {
|
||||
const std::map<OBJECT_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(OBJECT_TYPES, const char*, 4) enumStrings {
|
||||
{ OBJECT_TYPES::TYPE_NONE, "NONE" },
|
||||
{ OBJECT_TYPES::TYPE_EXECUTABLE, "EXECUTABLE" },
|
||||
{ OBJECT_TYPES::TYPE_LIBRARY, "LIBRARY" },
|
||||
@ -41,7 +41,7 @@ const char* to_string(OBJECT_TYPES e) {
|
||||
}
|
||||
|
||||
const char* to_string(ARCHITECTURES e) {
|
||||
const std::map<ARCHITECTURES, const char*> enumStrings {
|
||||
CONST_MAP(ARCHITECTURES, const char*, 10) enumStrings {
|
||||
{ ARCHITECTURES::ARCH_NONE, "NONE" },
|
||||
{ ARCHITECTURES::ARCH_ARM, "ARM" },
|
||||
{ ARCHITECTURES::ARCH_ARM64, "ARM64" },
|
||||
@ -59,7 +59,7 @@ const char* to_string(ARCHITECTURES e) {
|
||||
|
||||
|
||||
const char* to_string(MODES e) {
|
||||
const std::map<MODES, const char*> enumStrings {
|
||||
CONST_MAP(MODES, const char*, 15) enumStrings {
|
||||
{ MODES::MODE_NONE, "NONE" },
|
||||
{ MODES::MODE_16, "M16" },
|
||||
{ MODES::MODE_32, "M32" },
|
||||
@ -81,7 +81,7 @@ const char* to_string(MODES e) {
|
||||
}
|
||||
|
||||
const char* to_string(ENDIANNESS e) {
|
||||
const std::map<ENDIANNESS, const char*> enumStrings {
|
||||
CONST_MAP(ENDIANNESS, const char*, 3) enumStrings {
|
||||
{ ENDIANNESS::ENDIAN_NONE, "NONE" },
|
||||
{ ENDIANNESS::ENDIAN_BIG, "BIG" },
|
||||
{ ENDIANNESS::ENDIAN_LITTLE, "LITTLE" },
|
||||
@ -91,7 +91,7 @@ const char* to_string(ENDIANNESS e) {
|
||||
}
|
||||
|
||||
const char* to_string(Binary::VA_TYPES e) {
|
||||
const std::map<Binary::VA_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(Binary::VA_TYPES, const char*, 3) enumStrings {
|
||||
{ LIEF::Binary::VA_TYPES::AUTO, "AUTO" },
|
||||
{ LIEF::Binary::VA_TYPES::RVA, "RVA" },
|
||||
{ LIEF::Binary::VA_TYPES::VA, "VA" },
|
||||
|
@ -64,7 +64,6 @@ set(LIEF_ELF_INC_FILES
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/ELF/Header.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/ELF/Parser.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/ELF/Relocation.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/ELF/RelocationSizes.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/ELF/Section.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/ELF/Segment.hpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/LIEF/ELF/Symbol.hpp"
|
||||
@ -79,6 +78,8 @@ set(LIEF_ELF_INC_FILES
|
||||
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/ELF/Structures.hpp"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/include/LIEF/ELF/enums.hpp"
|
||||
|
||||
"${CMAKE_CURRENT_LIST_DIR}/RelocationSizes.hpp"
|
||||
)
|
||||
|
||||
set(LIEF_ELF_DATA_HANDLER_INCLUDE_FILES
|
||||
|
@ -15,13 +15,14 @@
|
||||
*/
|
||||
#include "LIEF/ELF/Structures.hpp"
|
||||
#include "LIEF/ELF/EnumToString.hpp"
|
||||
#include "frozen.hpp"
|
||||
#include <map>
|
||||
|
||||
namespace LIEF {
|
||||
namespace ELF {
|
||||
|
||||
const char* to_string(SYMBOL_BINDINGS e) {
|
||||
const std::map<SYMBOL_BINDINGS, const char*> enumStrings {
|
||||
CONST_MAP(SYMBOL_BINDINGS, const char*, 8) enumStrings {
|
||||
{ SYMBOL_BINDINGS::STB_LOCAL, "LOCAL" },
|
||||
{ SYMBOL_BINDINGS::STB_GLOBAL, "GLOBAL" },
|
||||
{ SYMBOL_BINDINGS::STB_WEAK, "WEAK" },
|
||||
@ -37,7 +38,7 @@ const char* to_string(SYMBOL_BINDINGS e) {
|
||||
|
||||
|
||||
const char* to_string(E_TYPE e) {
|
||||
const std::map<E_TYPE, const char*> enumStrings {
|
||||
CONST_MAP(E_TYPE, const char*, 7) enumStrings {
|
||||
{ E_TYPE::ET_NONE, "NONE" },
|
||||
{ E_TYPE::ET_REL, "RELOCATABLE" },
|
||||
{ E_TYPE::ET_EXEC, "EXECUTABLE" },
|
||||
@ -52,7 +53,7 @@ const char* to_string(E_TYPE e) {
|
||||
|
||||
|
||||
const char* to_string(VERSION e) {
|
||||
const std::map<VERSION, const char*> enumStrings {
|
||||
CONST_MAP(VERSION, const char*, 2) enumStrings {
|
||||
{ VERSION::EV_NONE, "NONE" },
|
||||
{ VERSION::EV_CURRENT, "CURRENT" }
|
||||
};
|
||||
@ -62,7 +63,7 @@ const char* to_string(VERSION e) {
|
||||
|
||||
|
||||
const char* to_string(ARCH e) {
|
||||
const std::map<ARCH, const char*> enumStrings {
|
||||
CONST_MAP(ARCH, const char*, 175) enumStrings {
|
||||
{ ARCH::EM_NONE, "None" },
|
||||
{ ARCH::EM_M32, "M32"},
|
||||
{ ARCH::EM_SPARC, "SPARC"},
|
||||
@ -244,7 +245,7 @@ const char* to_string(ARCH e) {
|
||||
}
|
||||
|
||||
const char* to_string(SEGMENT_TYPES e) {
|
||||
const std::map<SEGMENT_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(SEGMENT_TYPES, const char*, 24) enumStrings {
|
||||
{ SEGMENT_TYPES::PT_NULL, "NULL" },
|
||||
{ SEGMENT_TYPES::PT_LOAD, "LOAD" },
|
||||
{ SEGMENT_TYPES::PT_DYNAMIC, "DYNAMIC" },
|
||||
@ -275,7 +276,7 @@ const char* to_string(SEGMENT_TYPES e) {
|
||||
}
|
||||
|
||||
const char* to_string(DYNAMIC_TAGS e) {
|
||||
const std::map<DYNAMIC_TAGS, const char*> enumStrings {
|
||||
CONST_MAP(DYNAMIC_TAGS, const char*, 91) enumStrings {
|
||||
{ DYNAMIC_TAGS::DT_NULL, "NULL"},
|
||||
{ DYNAMIC_TAGS::DT_NEEDED, "NEEDED"},
|
||||
{ DYNAMIC_TAGS::DT_PLTRELSZ, "PLTRELSZ"},
|
||||
@ -375,7 +376,7 @@ const char* to_string(DYNAMIC_TAGS e) {
|
||||
|
||||
|
||||
const char* to_string(ELF_SECTION_TYPES e) {
|
||||
const std::map<ELF_SECTION_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(ELF_SECTION_TYPES, const char*, 38) enumStrings {
|
||||
{ ELF_SECTION_TYPES::SHT_NULL, "NULL"},
|
||||
{ ELF_SECTION_TYPES::SHT_PROGBITS, "PROGBITS"},
|
||||
{ ELF_SECTION_TYPES::SHT_SYMTAB, "SYMTAB"},
|
||||
@ -420,7 +421,7 @@ const char* to_string(ELF_SECTION_TYPES e) {
|
||||
}
|
||||
|
||||
const char* to_string(ELF_SECTION_FLAGS e) {
|
||||
const std::map<ELF_SECTION_FLAGS, const char*> enumStrings {
|
||||
CONST_MAP(ELF_SECTION_FLAGS, const char*, 25) enumStrings {
|
||||
{ ELF_SECTION_FLAGS::SHF_NONE, "NONE"},
|
||||
{ ELF_SECTION_FLAGS::SHF_WRITE, "WRITE"},
|
||||
{ ELF_SECTION_FLAGS::SHF_ALLOC, "ALLOC"},
|
||||
@ -453,7 +454,7 @@ const char* to_string(ELF_SECTION_FLAGS e) {
|
||||
|
||||
|
||||
const char* to_string(ELF_SYMBOL_TYPES e) {
|
||||
const std::map<ELF_SYMBOL_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(ELF_SYMBOL_TYPES, const char*, 12) enumStrings {
|
||||
{ ELF_SYMBOL_TYPES::STT_NOTYPE, "NOTYPE"},
|
||||
{ ELF_SYMBOL_TYPES::STT_OBJECT, "OBJECT"},
|
||||
{ ELF_SYMBOL_TYPES::STT_FUNC, "FUNC"},
|
||||
@ -473,7 +474,7 @@ const char* to_string(ELF_SYMBOL_TYPES e) {
|
||||
|
||||
|
||||
const char* to_string(RELOC_x86_64 e) {
|
||||
const std::map<RELOC_x86_64, const char*> enumStrings {
|
||||
CONST_MAP(RELOC_x86_64, const char*, 43) enumStrings {
|
||||
{ RELOC_x86_64::R_X86_64_NONE, "NONE"},
|
||||
{ RELOC_x86_64::R_X86_64_64, "R64"},
|
||||
{ RELOC_x86_64::R_X86_64_PC32, "PC32"},
|
||||
@ -523,7 +524,7 @@ const char* to_string(RELOC_x86_64 e) {
|
||||
}
|
||||
|
||||
const char* to_string(RELOC_ARM e) {
|
||||
const std::map<RELOC_ARM, const char*> enumStrings {
|
||||
CONST_MAP(RELOC_ARM, const char*, 138) enumStrings {
|
||||
{ RELOC_ARM::R_ARM_NONE, "NONE"},
|
||||
{ RELOC_ARM::R_ARM_PC24, "PC24"},
|
||||
{ RELOC_ARM::R_ARM_ABS32, "ABS32"},
|
||||
@ -668,7 +669,7 @@ const char* to_string(RELOC_ARM e) {
|
||||
}
|
||||
|
||||
const char* to_string(RELOC_AARCH64 e) {
|
||||
const std::map<RELOC_AARCH64, const char*> enumStrings {
|
||||
CONST_MAP(RELOC_AARCH64, const char*, 123) enumStrings {
|
||||
{ RELOC_AARCH64::R_AARCH64_NONE, "NONE"},
|
||||
{ RELOC_AARCH64::R_AARCH64_ABS64, "ABS64"},
|
||||
{ RELOC_AARCH64::R_AARCH64_ABS32, "ABS32"},
|
||||
@ -800,7 +801,7 @@ const char* to_string(RELOC_AARCH64 e) {
|
||||
|
||||
|
||||
const char* to_string(RELOC_i386 e) {
|
||||
const std::map<RELOC_i386, const char*> enumStrings {
|
||||
CONST_MAP(RELOC_i386, const char*, 41) enumStrings {
|
||||
{ RELOC_i386::R_386_NONE, "NONE"},
|
||||
{ RELOC_i386::R_386_32, "R32"},
|
||||
{ RELOC_i386::R_386_PC32, "PC32"},
|
||||
@ -848,7 +849,7 @@ const char* to_string(RELOC_i386 e) {
|
||||
}
|
||||
|
||||
const char* to_string(ELF_CLASS e) {
|
||||
const std::map<ELF_CLASS, const char*> enumStrings {
|
||||
CONST_MAP(ELF_CLASS, const char*, 3) enumStrings {
|
||||
{ ELF_CLASS::ELFCLASSNONE, "NONE"},
|
||||
{ ELF_CLASS::ELFCLASS32, "CLASS32"},
|
||||
{ ELF_CLASS::ELFCLASS64, "CLASS64"},
|
||||
@ -859,7 +860,7 @@ const char* to_string(ELF_CLASS e) {
|
||||
}
|
||||
|
||||
const char* to_string(ELF_DATA e) {
|
||||
const std::map<ELF_DATA, const char*> enumStrings {
|
||||
CONST_MAP(ELF_DATA, const char*, 3) enumStrings {
|
||||
{ ELF_DATA::ELFDATANONE, "NONE"},
|
||||
{ ELF_DATA::ELFDATA2LSB, "LSB"},
|
||||
{ ELF_DATA::ELFDATA2MSB, "MSB"},
|
||||
@ -870,7 +871,7 @@ const char* to_string(ELF_DATA e) {
|
||||
}
|
||||
|
||||
const char* to_string(OS_ABI e) {
|
||||
const std::map<OS_ABI, const char*> enumStrings {
|
||||
CONST_MAP(OS_ABI, const char*, 23) enumStrings {
|
||||
{ OS_ABI::ELFOSABI_SYSTEMV, "SYSTEMV"},
|
||||
{ OS_ABI::ELFOSABI_HPUX, "HPUX"},
|
||||
{ OS_ABI::ELFOSABI_NETBSD, "NETBSD"},
|
||||
@ -902,7 +903,7 @@ const char* to_string(OS_ABI e) {
|
||||
|
||||
|
||||
const char* to_string(DYNSYM_COUNT_METHODS e) {
|
||||
const std::map<DYNSYM_COUNT_METHODS, const char*> enumStrings {
|
||||
CONST_MAP(DYNSYM_COUNT_METHODS, const char*, 4) enumStrings {
|
||||
{ DYNSYM_COUNT_METHODS::COUNT_AUTO, "AUTO"},
|
||||
{ DYNSYM_COUNT_METHODS::COUNT_SECTION, "SECTION"},
|
||||
{ DYNSYM_COUNT_METHODS::COUNT_HASH, "HASH"},
|
||||
@ -915,7 +916,7 @@ const char* to_string(DYNSYM_COUNT_METHODS e) {
|
||||
|
||||
|
||||
const char* to_string(NOTE_TYPES e) {
|
||||
const std::map<NOTE_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(NOTE_TYPES, const char*, 5) enumStrings {
|
||||
{ NOTE_TYPES::NT_UNKNOWN, "UNKNOWN"},
|
||||
{ NOTE_TYPES::NT_GNU_ABI_TAG, "ABI_TAG"},
|
||||
{ NOTE_TYPES::NT_GNU_HWCAP, "HWCAP"},
|
||||
@ -928,7 +929,7 @@ const char* to_string(NOTE_TYPES e) {
|
||||
}
|
||||
|
||||
const char* to_string(NOTE_ABIS e) {
|
||||
const std::map<NOTE_ABIS, const char*> enumStrings {
|
||||
CONST_MAP(NOTE_ABIS, const char*, 7) enumStrings {
|
||||
{ NOTE_ABIS::ELF_NOTE_UNKNOWN, "UNKNOWN"},
|
||||
{ NOTE_ABIS::ELF_NOTE_OS_LINUX, "LINUX"},
|
||||
{ NOTE_ABIS::ELF_NOTE_OS_GNU, "GNU"},
|
||||
@ -943,7 +944,7 @@ const char* to_string(NOTE_ABIS e) {
|
||||
}
|
||||
|
||||
const char* to_string(RELOCATION_PURPOSES e) {
|
||||
const std::map<RELOCATION_PURPOSES, const char*> enumStrings {
|
||||
CONST_MAP(RELOCATION_PURPOSES, const char*, 4) enumStrings {
|
||||
{ RELOCATION_PURPOSES::RELOC_PURPOSE_NONE, "NONE"},
|
||||
{ RELOCATION_PURPOSES::RELOC_PURPOSE_PLTGOT, "PLTGOT"},
|
||||
{ RELOCATION_PURPOSES::RELOC_PURPOSE_DYNAMIC, "DYNAMIC"},
|
||||
@ -956,7 +957,7 @@ const char* to_string(RELOCATION_PURPOSES e) {
|
||||
|
||||
|
||||
const char* to_string(PPC64_EFLAGS e) {
|
||||
const std::map<PPC64_EFLAGS, const char*> enumStrings {
|
||||
CONST_MAP(PPC64_EFLAGS, const char*, 1) enumStrings {
|
||||
{ PPC64_EFLAGS::EF_PPC64_ABI, "ABI"},
|
||||
};
|
||||
|
||||
@ -966,7 +967,7 @@ const char* to_string(PPC64_EFLAGS e) {
|
||||
|
||||
|
||||
const char* to_string(ARM_EFLAGS e) {
|
||||
const std::map<ARM_EFLAGS, const char*> enumStrings {
|
||||
CONST_MAP(ARM_EFLAGS, const char*, 8) enumStrings {
|
||||
{ ARM_EFLAGS::EF_ARM_SOFT_FLOAT, "SOFT_FLOAT" },
|
||||
{ ARM_EFLAGS::EF_ARM_VFP_FLOAT, "VFP_FLOAT" },
|
||||
{ ARM_EFLAGS::EF_ARM_EABI_UNKNOWN, "UNKNOWN" },
|
||||
@ -982,7 +983,7 @@ const char* to_string(ARM_EFLAGS e) {
|
||||
}
|
||||
|
||||
const char* to_string(MIPS_EFLAGS e) {
|
||||
const std::map<MIPS_EFLAGS, const char*> enumStrings {
|
||||
CONST_MAP(MIPS_EFLAGS, const char*, 43) enumStrings {
|
||||
{ MIPS_EFLAGS::EF_MIPS_NOREORDER, "NOREORDER" },
|
||||
{ MIPS_EFLAGS::EF_MIPS_PIC, "PIC" },
|
||||
{ MIPS_EFLAGS::EF_MIPS_CPIC, "CPIC" },
|
||||
@ -1038,7 +1039,7 @@ const char* to_string(MIPS_EFLAGS e) {
|
||||
|
||||
|
||||
const char* to_string(HEXAGON_EFLAGS e) {
|
||||
const std::map<HEXAGON_EFLAGS, const char*> enumStrings {
|
||||
CONST_MAP(HEXAGON_EFLAGS, const char*, 9) enumStrings {
|
||||
{ HEXAGON_EFLAGS::EF_HEXAGON_MACH_V2, "MACH_V2" },
|
||||
{ HEXAGON_EFLAGS::EF_HEXAGON_MACH_V3, "MACH_V3" },
|
||||
{ HEXAGON_EFLAGS::EF_HEXAGON_MACH_V4, "MACH_V4" },
|
||||
@ -1057,7 +1058,7 @@ const char* to_string(HEXAGON_EFLAGS e) {
|
||||
}
|
||||
|
||||
const char* to_string(IDENTITY e) {
|
||||
const std::map<IDENTITY, const char*> enumStrings {
|
||||
CONST_MAP(IDENTITY, const char*, 11) enumStrings {
|
||||
{ IDENTITY::EI_MAG0, "MAG0" },
|
||||
{ IDENTITY::EI_MAG1, "MAG1" },
|
||||
{ IDENTITY::EI_MAG2, "MAG2" },
|
||||
@ -1076,7 +1077,7 @@ const char* to_string(IDENTITY e) {
|
||||
}
|
||||
|
||||
const char* to_string(SYMBOL_SECTION_INDEX e) {
|
||||
const std::map<SYMBOL_SECTION_INDEX, const char*> enumStrings {
|
||||
CONST_MAP(SYMBOL_SECTION_INDEX, const char*, 10) enumStrings {
|
||||
{ SYMBOL_SECTION_INDEX::SHN_UNDEF, "UNDEF" },
|
||||
{ SYMBOL_SECTION_INDEX::SHN_LORESERVE, "LORESERVE" },
|
||||
{ SYMBOL_SECTION_INDEX::SHN_LOPROC, "LOPROC" },
|
||||
@ -1095,7 +1096,7 @@ const char* to_string(SYMBOL_SECTION_INDEX e) {
|
||||
|
||||
|
||||
const char* to_string(DYNAMIC_FLAGS e) {
|
||||
const std::map<DYNAMIC_FLAGS, const char*> enum_strings {
|
||||
CONST_MAP(DYNAMIC_FLAGS, const char*, 5) enum_strings {
|
||||
{ DYNAMIC_FLAGS::DF_ORIGIN, "ORIGIN" },
|
||||
{ DYNAMIC_FLAGS::DF_SYMBOLIC, "SYMBOLIC" },
|
||||
{ DYNAMIC_FLAGS::DF_TEXTREL, "TEXTREL" },
|
||||
@ -1108,7 +1109,7 @@ const char* to_string(DYNAMIC_FLAGS e) {
|
||||
}
|
||||
|
||||
const char* to_string(DYNAMIC_FLAGS_1 e) {
|
||||
const std::map<DYNAMIC_FLAGS_1, const char*> enum_strings_flags1 {
|
||||
CONST_MAP(DYNAMIC_FLAGS_1, const char*, 26) enum_strings_flags1 {
|
||||
{ DYNAMIC_FLAGS_1::DF_1_NOW, "NOW" },
|
||||
{ DYNAMIC_FLAGS_1::DF_1_GLOBAL, "GLOBAL" },
|
||||
{ DYNAMIC_FLAGS_1::DF_1_GROUP, "GROUP" },
|
||||
@ -1142,7 +1143,7 @@ const char* to_string(DYNAMIC_FLAGS_1 e) {
|
||||
}
|
||||
|
||||
const char* to_string(ELF_SEGMENT_FLAGS e) {
|
||||
const std::map<ELF_SEGMENT_FLAGS, const char*> enum_strings {
|
||||
CONST_MAP(ELF_SEGMENT_FLAGS, const char*, 4) enum_strings {
|
||||
{ ELF_SEGMENT_FLAGS::PF_NONE, "NONE" },
|
||||
{ ELF_SEGMENT_FLAGS::PF_X, "X" },
|
||||
{ ELF_SEGMENT_FLAGS::PF_W, "W" },
|
||||
@ -1155,7 +1156,7 @@ const char* to_string(ELF_SEGMENT_FLAGS e) {
|
||||
|
||||
|
||||
const char* to_string(ELF_SYMBOL_VISIBILITY e) {
|
||||
const std::map<ELF_SYMBOL_VISIBILITY, const char*> enum_strings {
|
||||
CONST_MAP(ELF_SYMBOL_VISIBILITY, const char*, 4) enum_strings {
|
||||
{ ELF_SYMBOL_VISIBILITY::STV_DEFAULT, "DEFAULT" },
|
||||
{ ELF_SYMBOL_VISIBILITY::STV_HIDDEN, "HIDDEN" },
|
||||
{ ELF_SYMBOL_VISIBILITY::STV_INTERNAL, "INTERNAL" },
|
||||
|
@ -19,16 +19,20 @@
|
||||
#include <sstream>
|
||||
#include <numeric>
|
||||
|
||||
#include "frozen.hpp"
|
||||
|
||||
#include "LIEF/exception.hpp"
|
||||
#include "LIEF/ELF/hash.hpp"
|
||||
|
||||
#include "LIEF/ELF/Header.hpp"
|
||||
#include "LIEF/ELF/EnumToString.hpp"
|
||||
|
||||
#include "LIEF/logging++.hpp"
|
||||
|
||||
namespace LIEF {
|
||||
namespace ELF {
|
||||
|
||||
static const std::map<ARCH, std::pair<ARCHITECTURES, std::set<MODES>>> arch_elf_to_lief {
|
||||
static const std::map<ARCH, Header::abstract_architecture_t> arch_elf_to_lief {
|
||||
{ARCH::EM_NONE, {ARCH_NONE, {}}},
|
||||
{ARCH::EM_X86_64, {ARCH_X86, {MODE_64}}},
|
||||
{ARCH::EM_ARM, {ARCH_ARM, {MODE_32}}},
|
||||
@ -132,12 +136,13 @@ OBJECT_TYPES Header::abstract_object_type(void) const {
|
||||
}
|
||||
|
||||
|
||||
std::pair<ARCHITECTURES, std::set<MODES>> Header::abstract_architecture(void) const {
|
||||
try {
|
||||
return arch_elf_to_lief.at(this->machine_type());
|
||||
} catch (const std::out_of_range&) {
|
||||
throw not_implemented(to_string(this->machine_type()));
|
||||
Header::abstract_architecture_t Header::abstract_architecture(void) const {
|
||||
auto&& it = arch_elf_to_lief.find(this->machine_type());
|
||||
if (it == std::end(arch_elf_to_lief)) {
|
||||
LOG(ERROR) << to_string(this->machine_type()) << " is not supported!";
|
||||
return {};
|
||||
}
|
||||
return it->second;
|
||||
}
|
||||
|
||||
|
||||
|
@ -19,9 +19,11 @@
|
||||
#include "LIEF/ELF/hash.hpp"
|
||||
|
||||
#include "LIEF/ELF/Relocation.hpp"
|
||||
#include "LIEF/ELF/RelocationSizes.hpp"
|
||||
#include "LIEF/ELF/EnumToString.hpp"
|
||||
|
||||
#include "RelocationSizes.hpp"
|
||||
#include "LIEF/logging++.hpp"
|
||||
|
||||
namespace LIEF {
|
||||
namespace ELF {
|
||||
|
||||
@ -172,47 +174,48 @@ size_t Relocation::size(void) const {
|
||||
switch (this->architecture()) {
|
||||
case ARCH::EM_X86_64:
|
||||
{
|
||||
try {
|
||||
return relocation_x86_64_sizes.at(static_cast<RELOC_x86_64>(this->type()));
|
||||
} catch (const std::out_of_range&) {
|
||||
throw not_implemented(to_string(this->architecture()) + std::string(" - ") + to_string(static_cast<RELOC_x86_64>(this->type())));
|
||||
auto&& it = relocation_x86_64_sizes.find(static_cast<RELOC_x86_64>(this->type()));
|
||||
if (it == std::end(relocation_x86_64_sizes)) {
|
||||
LOG(ERROR) << to_string(this->architecture()) << std::string(" - ") << to_string(static_cast<RELOC_x86_64>(this->type()));
|
||||
return -1u;
|
||||
}
|
||||
break;
|
||||
return it->second;
|
||||
}
|
||||
|
||||
case ARCH::EM_386:
|
||||
{
|
||||
try {
|
||||
return relocation_i386_sizes.at(static_cast<RELOC_i386>(this->type()));
|
||||
} catch (const std::out_of_range&) {
|
||||
throw not_implemented(to_string(this->architecture()) + std::string(" - ") + to_string(static_cast<RELOC_i386>(this->type())));
|
||||
auto&& it = relocation_i386_sizes.find(static_cast<RELOC_i386>(this->type()));
|
||||
if (it == std::end(relocation_i386_sizes)) {
|
||||
LOG(ERROR) << to_string(this->architecture()) << std::string(" - ") << to_string(static_cast<RELOC_i386>(this->type()));
|
||||
return -1u;
|
||||
}
|
||||
break;
|
||||
return it->second;
|
||||
}
|
||||
|
||||
case ARCH::EM_ARM:
|
||||
{
|
||||
try {
|
||||
return relocation_ARM_sizes.at(static_cast<RELOC_ARM>(this->type()));
|
||||
} catch (const std::out_of_range&) {
|
||||
throw not_implemented(to_string(this->architecture()) + std::string(" - ") + to_string(static_cast<RELOC_ARM>(this->type())));
|
||||
auto&& it = relocation_ARM_sizes.find(static_cast<RELOC_ARM>(this->type()));
|
||||
if (it == std::end(relocation_ARM_sizes)) {
|
||||
LOG(ERROR) << to_string(this->architecture()) << std::string(" - ") << to_string(static_cast<RELOC_ARM>(this->type()));
|
||||
return -1u;
|
||||
}
|
||||
break;
|
||||
return it->second;
|
||||
}
|
||||
|
||||
case ARCH::EM_AARCH64:
|
||||
{
|
||||
try {
|
||||
return relocation_AARCH64_sizes.at(static_cast<RELOC_AARCH64>(this->type()));
|
||||
} catch (const std::out_of_range&) {
|
||||
throw not_implemented(to_string(this->architecture()) + std::string(" - ") + to_string(static_cast<RELOC_AARCH64>(this->type())));
|
||||
auto&& it = relocation_AARCH64_sizes.find(static_cast<RELOC_AARCH64>(this->type()));
|
||||
if (it == std::end(relocation_AARCH64_sizes)) {
|
||||
LOG(ERROR) << to_string(this->architecture()) << std::string(" - ") << to_string(static_cast<RELOC_AARCH64>(this->type()));
|
||||
return -1u;
|
||||
}
|
||||
break;
|
||||
return it->second;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
throw not_implemented(to_string(this->architecture()));
|
||||
LOG(ERROR) << to_string(this->architecture()) << " not implemented";
|
||||
return -1u;
|
||||
}
|
||||
}
|
||||
|
||||
|
387
src/ELF/RelocationSizes.hpp
Normal file
387
src/ELF/RelocationSizes.hpp
Normal file
@ -0,0 +1,387 @@
|
||||
/* 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.
|
||||
*/
|
||||
#ifndef LIEF_ELF_RELOCATIONSIZE_H_
|
||||
#define LIEF_ELF_RELOCATIONSIZE_H_
|
||||
|
||||
#include <map>
|
||||
|
||||
#include "LIEF/ELF/enums.hpp"
|
||||
#include "frozen.hpp"
|
||||
|
||||
namespace LIEF {
|
||||
namespace ELF {
|
||||
|
||||
CONST_MAP(RELOC_x86_64, uint32_t, 43) relocation_x86_64_sizes {
|
||||
{RELOC_x86_64::R_X86_64_NONE, 0 },
|
||||
{RELOC_x86_64::R_X86_64_64, 64 },
|
||||
{RELOC_x86_64::R_X86_64_PC32, 32 },
|
||||
{RELOC_x86_64::R_X86_64_GOT32, 32 },
|
||||
{RELOC_x86_64::R_X86_64_PLT32, 32 },
|
||||
{RELOC_x86_64::R_X86_64_COPY, 32 },
|
||||
{RELOC_x86_64::R_X86_64_GLOB_DAT, 64 },
|
||||
{RELOC_x86_64::R_X86_64_JUMP_SLOT, 64 },
|
||||
{RELOC_x86_64::R_X86_64_RELATIVE, 64 },
|
||||
{RELOC_x86_64::R_X86_64_GOTPCREL, 32 },
|
||||
{RELOC_x86_64::R_X86_64_32, 32 },
|
||||
{RELOC_x86_64::R_X86_64_32S, 32 },
|
||||
{RELOC_x86_64::R_X86_64_16, 16 },
|
||||
{RELOC_x86_64::R_X86_64_PC16, 16 },
|
||||
{RELOC_x86_64::R_X86_64_8, 8 },
|
||||
{RELOC_x86_64::R_X86_64_PC8, 8 },
|
||||
{RELOC_x86_64::R_X86_64_DTPMOD64, 64 },
|
||||
{RELOC_x86_64::R_X86_64_DTPOFF64, 64 },
|
||||
{RELOC_x86_64::R_X86_64_TPOFF64, 64 },
|
||||
{RELOC_x86_64::R_X86_64_TLSGD, 32 },
|
||||
{RELOC_x86_64::R_X86_64_TLSLD, 32 },
|
||||
{RELOC_x86_64::R_X86_64_DTPOFF32, 32 },
|
||||
{RELOC_x86_64::R_X86_64_GOTTPOFF, 32 },
|
||||
{RELOC_x86_64::R_X86_64_TPOFF32, 32 },
|
||||
{RELOC_x86_64::R_X86_64_PC64, 64 },
|
||||
{RELOC_x86_64::R_X86_64_GOTOFF64, 64 },
|
||||
{RELOC_x86_64::R_X86_64_GOTPC32, 32 },
|
||||
{RELOC_x86_64::R_X86_64_GOT64, 64 },
|
||||
{RELOC_x86_64::R_X86_64_GOTPCREL64, 64 },
|
||||
{RELOC_x86_64::R_X86_64_GOTPC64, 64 },
|
||||
{RELOC_x86_64::R_X86_64_GOTPLT64, 64 },
|
||||
{RELOC_x86_64::R_X86_64_PLTOFF64, 64 },
|
||||
{RELOC_x86_64::R_X86_64_SIZE32, 32 },
|
||||
{RELOC_x86_64::R_X86_64_SIZE64, 64 },
|
||||
{RELOC_x86_64::R_X86_64_GOTPC32_TLSDESC, 32 },
|
||||
{RELOC_x86_64::R_X86_64_TLSDESC_CALL, 0 },
|
||||
{RELOC_x86_64::R_X86_64_TLSDESC, 64 },
|
||||
{RELOC_x86_64::R_X86_64_IRELATIVE, 64 },
|
||||
{RELOC_x86_64::R_X86_64_RELATIVE64, 64 },
|
||||
{RELOC_x86_64::R_X86_64_PC32_BND, 32 },
|
||||
{RELOC_x86_64::R_X86_64_PLT32_BND, 32 },
|
||||
{RELOC_x86_64::R_X86_64_GOTPCRELX, 32 },
|
||||
{RELOC_x86_64::R_X86_64_REX_GOTPCRELX, 32 },
|
||||
};
|
||||
|
||||
CONST_MAP(RELOC_i386, uint32_t, 40) relocation_i386_sizes {
|
||||
{RELOC_i386::R_386_NONE, 0 },
|
||||
{RELOC_i386::R_386_32, 32 },
|
||||
{RELOC_i386::R_386_PC32, 32 },
|
||||
{RELOC_i386::R_386_GOT32, 32 },
|
||||
{RELOC_i386::R_386_PLT32, 32 },
|
||||
{RELOC_i386::R_386_COPY, 32 },
|
||||
{RELOC_i386::R_386_GLOB_DAT, 32 },
|
||||
{RELOC_i386::R_386_JUMP_SLOT, 32 },
|
||||
{RELOC_i386::R_386_RELATIVE, 32 },
|
||||
{RELOC_i386::R_386_GOTOFF, 32 },
|
||||
{RELOC_i386::R_386_GOTPC, 32 },
|
||||
{RELOC_i386::R_386_32PLT, 32 },
|
||||
{RELOC_i386::R_386_TLS_TPOFF, 32 },
|
||||
{RELOC_i386::R_386_TLS_IE, 32 },
|
||||
{RELOC_i386::R_386_TLS_GOTIE, 32 },
|
||||
{RELOC_i386::R_386_TLS_LE, 32 },
|
||||
{RELOC_i386::R_386_TLS_GD, 32 },
|
||||
{RELOC_i386::R_386_TLS_LDM, 32 },
|
||||
{RELOC_i386::R_386_16, 16 },
|
||||
{RELOC_i386::R_386_PC16, 16 },
|
||||
{RELOC_i386::R_386_8, 8 },
|
||||
{RELOC_i386::R_386_PC8, 8 },
|
||||
{RELOC_i386::R_386_TLS_GD_32, 32 },
|
||||
{RELOC_i386::R_386_TLS_GD_PUSH, 32 },
|
||||
{RELOC_i386::R_386_TLS_GD_CALL, 32 },
|
||||
{RELOC_i386::R_386_TLS_GD_POP, 32 },
|
||||
{RELOC_i386::R_386_TLS_LDM_32, 32 },
|
||||
{RELOC_i386::R_386_TLS_LDM_PUSH, 32 },
|
||||
{RELOC_i386::R_386_TLS_LDM_CALL, 0 },
|
||||
{RELOC_i386::R_386_TLS_LDM_POP, 32 },
|
||||
{RELOC_i386::R_386_TLS_LDO_32, 32 },
|
||||
{RELOC_i386::R_386_TLS_IE_32, 32 },
|
||||
{RELOC_i386::R_386_TLS_LE_32, 32 },
|
||||
{RELOC_i386::R_386_TLS_DTPMOD32, 32 },
|
||||
{RELOC_i386::R_386_TLS_DTPOFF32, 32 },
|
||||
{RELOC_i386::R_386_TLS_TPOFF32, 32 },
|
||||
{RELOC_i386::R_386_TLS_GOTDESC, 32 },
|
||||
{RELOC_i386::R_386_TLS_DESC_CALL, 32 },
|
||||
{RELOC_i386::R_386_TLS_DESC, 32 },
|
||||
{RELOC_i386::R_386_IRELATIVE, 32 },
|
||||
};
|
||||
|
||||
// From https://github.com/gittup/binutils/blob/gittup/bfd/elf32-arm.c#L75
|
||||
CONST_MAP(RELOC_ARM, uint32_t, 138) relocation_ARM_sizes {
|
||||
{RELOC_ARM::R_ARM_NONE, 0 },
|
||||
{RELOC_ARM::R_ARM_PC24, 24 },
|
||||
{RELOC_ARM::R_ARM_ABS32, 32 },
|
||||
{RELOC_ARM::R_ARM_REL32, 32 },
|
||||
{RELOC_ARM::R_ARM_LDR_PC_G0, 32 },
|
||||
{RELOC_ARM::R_ARM_ABS16, 16 },
|
||||
{RELOC_ARM::R_ARM_ABS12, 12 },
|
||||
{RELOC_ARM::R_ARM_THM_ABS5, 5 },
|
||||
{RELOC_ARM::R_ARM_ABS8, 8 },
|
||||
{RELOC_ARM::R_ARM_SBREL32, 32 },
|
||||
{RELOC_ARM::R_ARM_THM_CALL, 25 },
|
||||
{RELOC_ARM::R_ARM_THM_PC8, 8 },
|
||||
{RELOC_ARM::R_ARM_BREL_ADJ, 32 },
|
||||
{RELOC_ARM::R_ARM_TLS_DESC, 0 },
|
||||
{RELOC_ARM::R_ARM_THM_SWI8, 0 },
|
||||
{RELOC_ARM::R_ARM_XPC25, 25 },
|
||||
{RELOC_ARM::R_ARM_THM_XPC22, 22 },
|
||||
{RELOC_ARM::R_ARM_TLS_DTPMOD32, 32 },
|
||||
{RELOC_ARM::R_ARM_TLS_DTPOFF32, 32 },
|
||||
{RELOC_ARM::R_ARM_TLS_TPOFF32, 32 },
|
||||
{RELOC_ARM::R_ARM_COPY, 32 },
|
||||
{RELOC_ARM::R_ARM_GLOB_DAT, 32 },
|
||||
{RELOC_ARM::R_ARM_JUMP_SLOT, 32 },
|
||||
{RELOC_ARM::R_ARM_RELATIVE, 32 },
|
||||
{RELOC_ARM::R_ARM_GOTOFF32, 32 },
|
||||
{RELOC_ARM::R_ARM_BASE_PREL, 32 },
|
||||
{RELOC_ARM::R_ARM_GOT_BREL, 32 },
|
||||
{RELOC_ARM::R_ARM_PLT32, 24 },
|
||||
{RELOC_ARM::R_ARM_CALL, 24 },
|
||||
{RELOC_ARM::R_ARM_JUMP24, 24 },
|
||||
{RELOC_ARM::R_ARM_THM_JUMP24, 24 },
|
||||
{RELOC_ARM::R_ARM_BASE_ABS, 21 },
|
||||
{RELOC_ARM::R_ARM_ALU_PCREL_7_0, 12 },
|
||||
{RELOC_ARM::R_ARM_ALU_PCREL_15_8, 12 },
|
||||
{RELOC_ARM::R_ARM_ALU_PCREL_23_15, 12 },
|
||||
{RELOC_ARM::R_ARM_LDR_SBREL_11_0_NC, 12 },
|
||||
{RELOC_ARM::R_ARM_ALU_SBREL_19_12_NC, 8 },
|
||||
{RELOC_ARM::R_ARM_ALU_SBREL_27_20_CK, 8 },
|
||||
{RELOC_ARM::R_ARM_TARGET1, 32 },
|
||||
{RELOC_ARM::R_ARM_SBREL31, 32 },
|
||||
{RELOC_ARM::R_ARM_V4BX, 32 },
|
||||
{RELOC_ARM::R_ARM_TARGET2, 32 },
|
||||
{RELOC_ARM::R_ARM_PREL31, 31 },
|
||||
{RELOC_ARM::R_ARM_MOVW_ABS_NC, 16 },
|
||||
{RELOC_ARM::R_ARM_MOVT_ABS, 16 },
|
||||
{RELOC_ARM::R_ARM_MOVW_PREL_NC, 16 },
|
||||
{RELOC_ARM::R_ARM_MOVT_PREL, 16 },
|
||||
{RELOC_ARM::R_ARM_THM_MOVW_ABS_NC, 16 },
|
||||
{RELOC_ARM::R_ARM_THM_MOVT_ABS, 16 },
|
||||
{RELOC_ARM::R_ARM_THM_MOVW_PREL_NC, 16 },
|
||||
{RELOC_ARM::R_ARM_THM_MOVT_PREL, 16 },
|
||||
{RELOC_ARM::R_ARM_THM_JUMP19, 19 },
|
||||
{RELOC_ARM::R_ARM_THM_JUMP6, 6 },
|
||||
{RELOC_ARM::R_ARM_THM_ALU_PREL_11_0, 13 },
|
||||
{RELOC_ARM::R_ARM_THM_PC12, 13 },
|
||||
{RELOC_ARM::R_ARM_ABS32_NOI, 32 },
|
||||
{RELOC_ARM::R_ARM_REL32_NOI, 32 },
|
||||
{RELOC_ARM::R_ARM_ALU_PC_G0_NC, 32 },
|
||||
{RELOC_ARM::R_ARM_ALU_PC_G0, 32 },
|
||||
{RELOC_ARM::R_ARM_ALU_PC_G1_NC, 32 },
|
||||
{RELOC_ARM::R_ARM_ALU_PC_G1, 32 },
|
||||
{RELOC_ARM::R_ARM_ALU_PC_G2, 32 },
|
||||
{RELOC_ARM::R_ARM_LDR_PC_G1, 32 },
|
||||
{RELOC_ARM::R_ARM_LDR_PC_G2, 32 },
|
||||
{RELOC_ARM::R_ARM_LDRS_PC_G0, 32 },
|
||||
{RELOC_ARM::R_ARM_LDRS_PC_G1, 32 },
|
||||
{RELOC_ARM::R_ARM_LDRS_PC_G2, 32 },
|
||||
{RELOC_ARM::R_ARM_LDC_PC_G0, 32 },
|
||||
{RELOC_ARM::R_ARM_LDC_PC_G1, 32 },
|
||||
{RELOC_ARM::R_ARM_LDC_PC_G2, 32 },
|
||||
{RELOC_ARM::R_ARM_ALU_SB_G0_NC, 32 },
|
||||
{RELOC_ARM::R_ARM_ALU_SB_G0, 32 },
|
||||
{RELOC_ARM::R_ARM_ALU_SB_G1_NC, 32 },
|
||||
{RELOC_ARM::R_ARM_ALU_SB_G1, 32 },
|
||||
{RELOC_ARM::R_ARM_ALU_SB_G2, 32 },
|
||||
{RELOC_ARM::R_ARM_LDR_SB_G0, 32 },
|
||||
{RELOC_ARM::R_ARM_LDR_SB_G1, 32 },
|
||||
{RELOC_ARM::R_ARM_LDR_SB_G2, 32 },
|
||||
{RELOC_ARM::R_ARM_LDRS_SB_G0, 32 },
|
||||
{RELOC_ARM::R_ARM_LDRS_SB_G1, 32 },
|
||||
{RELOC_ARM::R_ARM_LDRS_SB_G2, 32 },
|
||||
{RELOC_ARM::R_ARM_LDC_SB_G0, 32 },
|
||||
{RELOC_ARM::R_ARM_LDC_SB_G1, 32 },
|
||||
{RELOC_ARM::R_ARM_LDC_SB_G2, 32 },
|
||||
{RELOC_ARM::R_ARM_MOVW_BREL_NC, 16 },
|
||||
{RELOC_ARM::R_ARM_MOVT_BREL, 16 },
|
||||
{RELOC_ARM::R_ARM_MOVW_BREL, 16 },
|
||||
{RELOC_ARM::R_ARM_THM_MOVW_BREL_NC, 16 },
|
||||
{RELOC_ARM::R_ARM_THM_MOVT_BREL, 16 },
|
||||
{RELOC_ARM::R_ARM_THM_MOVW_BREL, 16 },
|
||||
{RELOC_ARM::R_ARM_TLS_GOTDESC, 0 },
|
||||
{RELOC_ARM::R_ARM_TLS_CALL, 0 },
|
||||
{RELOC_ARM::R_ARM_TLS_DESCSEQ, 0 },
|
||||
{RELOC_ARM::R_ARM_THM_TLS_CALL, 0 },
|
||||
{RELOC_ARM::R_ARM_PLT32_ABS, 32 },
|
||||
{RELOC_ARM::R_ARM_GOT_ABS, 32 },
|
||||
{RELOC_ARM::R_ARM_GOT_PREL, 32 },
|
||||
{RELOC_ARM::R_ARM_GOT_BREL12, 12 },
|
||||
{RELOC_ARM::R_ARM_GOTOFF12, 12 },
|
||||
{RELOC_ARM::R_ARM_GOTRELAX, 12 },
|
||||
{RELOC_ARM::R_ARM_GNU_VTENTRY, 0 },
|
||||
{RELOC_ARM::R_ARM_GNU_VTINHERIT, 0 },
|
||||
{RELOC_ARM::R_ARM_THM_JUMP11, 11 },
|
||||
{RELOC_ARM::R_ARM_THM_JUMP8, 8 },
|
||||
{RELOC_ARM::R_ARM_TLS_GD32, 32 },
|
||||
{RELOC_ARM::R_ARM_TLS_LDM32, 32 },
|
||||
{RELOC_ARM::R_ARM_TLS_LDO32, 32 },
|
||||
{RELOC_ARM::R_ARM_TLS_IE32, 32 },
|
||||
{RELOC_ARM::R_ARM_TLS_LE32, 32 },
|
||||
{RELOC_ARM::R_ARM_TLS_LDO12, 12 },
|
||||
{RELOC_ARM::R_ARM_TLS_LE12, 12 },
|
||||
{RELOC_ARM::R_ARM_TLS_IE12GP, 12 },
|
||||
{RELOC_ARM::R_ARM_PRIVATE_0, 0 },
|
||||
{RELOC_ARM::R_ARM_PRIVATE_1, 0 },
|
||||
{RELOC_ARM::R_ARM_PRIVATE_2, 0 },
|
||||
{RELOC_ARM::R_ARM_PRIVATE_3, 0 },
|
||||
{RELOC_ARM::R_ARM_PRIVATE_4, 0 },
|
||||
{RELOC_ARM::R_ARM_PRIVATE_5, 0 },
|
||||
{RELOC_ARM::R_ARM_PRIVATE_6, 0 },
|
||||
{RELOC_ARM::R_ARM_PRIVATE_7, 0 },
|
||||
{RELOC_ARM::R_ARM_PRIVATE_8, 0 },
|
||||
{RELOC_ARM::R_ARM_PRIVATE_9, 0 },
|
||||
{RELOC_ARM::R_ARM_PRIVATE_10, 0 },
|
||||
{RELOC_ARM::R_ARM_PRIVATE_11, 0 },
|
||||
{RELOC_ARM::R_ARM_PRIVATE_12, 0 },
|
||||
{RELOC_ARM::R_ARM_PRIVATE_13, 0 },
|
||||
{RELOC_ARM::R_ARM_PRIVATE_14, 0 },
|
||||
{RELOC_ARM::R_ARM_PRIVATE_15, 0 },
|
||||
{RELOC_ARM::R_ARM_ME_TOO, 0 },
|
||||
{RELOC_ARM::R_ARM_THM_TLS_DESCSEQ16, 0 },
|
||||
{RELOC_ARM::R_ARM_THM_TLS_DESCSEQ32, 0 },
|
||||
{RELOC_ARM::R_ARM_IRELATIVE, 0 },
|
||||
{RELOC_ARM::R_ARM_RXPC25, 25 },
|
||||
{RELOC_ARM::R_ARM_RSBREL32, 32 },
|
||||
{RELOC_ARM::R_ARM_THM_RPC22, 22 },
|
||||
{RELOC_ARM::R_ARM_RREL32, 32 },
|
||||
{RELOC_ARM::R_ARM_RPC24, 24 },
|
||||
{RELOC_ARM::R_ARM_RBASE, 0 },
|
||||
};
|
||||
|
||||
CONST_MAP(RELOC_AARCH64, uint32_t, 123) relocation_AARCH64_sizes {
|
||||
{ RELOC_AARCH64::R_AARCH64_NONE, 0 },
|
||||
{ RELOC_AARCH64::R_AARCH64_ABS64, 64 },
|
||||
{ RELOC_AARCH64::R_AARCH64_ABS32, 32 },
|
||||
{ RELOC_AARCH64::R_AARCH64_ABS16, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_PREL64, 64 },
|
||||
{ RELOC_AARCH64::R_AARCH64_PREL32, 32 },
|
||||
{ RELOC_AARCH64::R_AARCH64_PREL16, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_UABS_G0, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_UABS_G0_NC, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_UABS_G1, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_UABS_G1_NC, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_UABS_G2, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_UABS_G2_NC, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_UABS_G3, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_SABS_G0, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_SABS_G1, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_SABS_G2, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_LD_PREL_LO19, 19 },
|
||||
{ RELOC_AARCH64::R_AARCH64_ADR_PREL_LO21, 21 },
|
||||
{ RELOC_AARCH64::R_AARCH64_ADR_PREL_PG_HI21, 21 },
|
||||
{ RELOC_AARCH64::R_AARCH64_ADR_PREL_PG_HI21_NC, 21 },
|
||||
{ RELOC_AARCH64::R_AARCH64_ADD_ABS_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_LDST8_ABS_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TSTBR14, 14 },
|
||||
{ RELOC_AARCH64::R_AARCH64_CONDBR19, 19 },
|
||||
{ RELOC_AARCH64::R_AARCH64_JUMP26, 26 },
|
||||
{ RELOC_AARCH64::R_AARCH64_CALL26, 26 },
|
||||
{ RELOC_AARCH64::R_AARCH64_LDST16_ABS_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_LDST32_ABS_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_LDST64_ABS_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_PREL_G0, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_PREL_G0_NC, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_PREL_G1, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_PREL_G1_NC, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_PREL_G2, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_PREL_G2_NC, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_PREL_G3, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_LDST128_ABS_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_GOTOFF_G0, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_GOTOFF_G0_NC, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_GOTOFF_G1, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_GOTOFF_G1_NC, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_GOTOFF_G2, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_GOTOFF_G2_NC, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_MOVW_GOTOFF_G3, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_GOTREL64, 64 },
|
||||
{ RELOC_AARCH64::R_AARCH64_GOTREL32, 64 },
|
||||
{ RELOC_AARCH64::R_AARCH64_GOT_LD_PREL19, 19 },
|
||||
{ RELOC_AARCH64::R_AARCH64_LD64_GOTOFF_LO15, 15 },
|
||||
{ RELOC_AARCH64::R_AARCH64_ADR_GOT_PAGE, 21 },
|
||||
{ RELOC_AARCH64::R_AARCH64_LD64_GOT_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_LD64_GOTPAGE_LO15, 15 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSGD_ADR_PREL21, 21 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSGD_ADR_PAGE21, 21 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSGD_ADD_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSGD_MOVW_G1, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSGD_MOVW_G0_NC, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_ADR_PREL21, 21 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_ADR_PAGE21, 21 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_ADD_LO12_NC, 0 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_MOVW_G1, 0 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_MOVW_G0_NC, 0 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_LD_PREL19, 19 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_MOVW_DTPREL_G2, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_MOVW_DTPREL_G1, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_MOVW_DTPREL_G0, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_ADD_DTPREL_HI12, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_ADD_DTPREL_LO12, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_LDST8_DTPREL_LO12, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_LDST16_DTPREL_LO12, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_LDST32_DTPREL_LO12, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_LDST64_DTPREL_LO12, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSIE_MOVW_GOTTPREL_G1, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21, 21 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSIE_LD_GOTTPREL_PREL19, 19 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLE_MOVW_TPREL_G2, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLE_MOVW_TPREL_G1, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLE_MOVW_TPREL_G1_NC, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLE_MOVW_TPREL_G0, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLE_MOVW_TPREL_G0_NC, 16 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLE_ADD_TPREL_HI12, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLE_ADD_TPREL_LO12, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLE_ADD_TPREL_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLE_LDST8_TPREL_LO12, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLE_LDST16_TPREL_LO12, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLE_LDST32_TPREL_LO12, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLE_LDST64_TPREL_LO12, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSDESC_LD_PREL19, 19 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSDESC_ADR_PREL21, 21 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSDESC_ADR_PAGE21, 21 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSDESC_LD64_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSDESC_ADD_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSDESC_OFF_G1, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSDESC_OFF_G0_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSDESC_LDR, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSDESC_ADD, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSDESC_CALL, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLE_LDST128_TPREL_LO12, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_LDST128_DTPREL_LO12, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC, 12 },
|
||||
{ RELOC_AARCH64::R_AARCH64_COPY, 64 },
|
||||
{ RELOC_AARCH64::R_AARCH64_GLOB_DAT, 64 },
|
||||
{ RELOC_AARCH64::R_AARCH64_JUMP_SLOT, 64 },
|
||||
{ RELOC_AARCH64::R_AARCH64_RELATIVE, 64 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLS_DTPREL64, 64 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLS_DTPMOD64, 64 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLS_TPREL64, 64 },
|
||||
{ RELOC_AARCH64::R_AARCH64_TLSDESC, 64 },
|
||||
{ RELOC_AARCH64::R_AARCH64_IRELATIVE, 64 },
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
@ -15,14 +15,14 @@
|
||||
*/
|
||||
#include "LIEF/MachO/Structures.hpp"
|
||||
#include "LIEF/MachO/EnumToString.hpp"
|
||||
#include <map>
|
||||
#include "frozen.hpp"
|
||||
|
||||
namespace LIEF {
|
||||
namespace MachO {
|
||||
|
||||
|
||||
const char* to_string(MACHO_TYPES e) {
|
||||
const std::map<MACHO_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(MACHO_TYPES, const char*, 6) enumStrings {
|
||||
{ MACHO_TYPES::MH_MAGIC, "MAGIC"},
|
||||
{ MACHO_TYPES::MH_CIGAM, "CIGAM"},
|
||||
{ MACHO_TYPES::MH_MAGIC_64, "MAGIC_64"},
|
||||
@ -36,7 +36,7 @@ const char* to_string(MACHO_TYPES e) {
|
||||
|
||||
|
||||
const char* to_string(FILE_TYPES e) {
|
||||
const std::map<FILE_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(FILE_TYPES, const char*, 11) enumStrings {
|
||||
{ FILE_TYPES::MH_OBJECT, "OBJECT"},
|
||||
{ FILE_TYPES::MH_EXECUTE, "EXECUTE"},
|
||||
{ FILE_TYPES::MH_FVMLIB, "FVMLIB"},
|
||||
@ -54,7 +54,7 @@ const char* to_string(FILE_TYPES e) {
|
||||
}
|
||||
|
||||
const char* to_string(LOAD_COMMAND_TYPES e) {
|
||||
const std::map<LOAD_COMMAND_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(LOAD_COMMAND_TYPES, const char*, 49) enumStrings {
|
||||
{ LOAD_COMMAND_TYPES::LC_SEGMENT, "SEGMENT"},
|
||||
{ LOAD_COMMAND_TYPES::LC_SYMTAB, "SYMTAB"},
|
||||
{ LOAD_COMMAND_TYPES::LC_SYMSEG, "SYMSEG"},
|
||||
@ -110,7 +110,7 @@ const char* to_string(LOAD_COMMAND_TYPES e) {
|
||||
}
|
||||
|
||||
const char* to_string(CPU_TYPES e) {
|
||||
const std::map<CPU_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(CPU_TYPES, const char*, 10) enumStrings {
|
||||
{ CPU_TYPES::CPU_TYPE_ANY, "ANY"},
|
||||
{ CPU_TYPES::CPU_TYPE_X86, "x86"},
|
||||
{ CPU_TYPES::CPU_TYPE_I386, "i386"},
|
||||
@ -128,7 +128,7 @@ const char* to_string(CPU_TYPES e) {
|
||||
}
|
||||
|
||||
const char* to_string(HEADER_FLAGS e) {
|
||||
const std::map<HEADER_FLAGS, const char*> enumStrings {
|
||||
CONST_MAP(HEADER_FLAGS, const char*, 26) enumStrings {
|
||||
{ HEADER_FLAGS::MH_NOUNDEFS ,"NOUNDEFS"},
|
||||
{ HEADER_FLAGS::MH_INCRLINK ,"INCRLINK"},
|
||||
{ HEADER_FLAGS::MH_DYLDLINK ,"DYLDLINK"},
|
||||
@ -161,7 +161,7 @@ const char* to_string(HEADER_FLAGS e) {
|
||||
}
|
||||
|
||||
const char* to_string(MACHO_SECTION_TYPES e) {
|
||||
const std::map<MACHO_SECTION_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(MACHO_SECTION_TYPES, const char*, 22) enumStrings {
|
||||
{ MACHO_SECTION_TYPES::S_REGULAR, "REGULAR"},
|
||||
{ MACHO_SECTION_TYPES::S_ZEROFILL, "ZEROFILL"},
|
||||
{ MACHO_SECTION_TYPES::S_CSTRING_LITERALS, "CSTRING_LITERALS"},
|
||||
@ -190,7 +190,7 @@ const char* to_string(MACHO_SECTION_TYPES e) {
|
||||
}
|
||||
|
||||
const char* to_string(MACHO_SECTION_FLAGS e) {
|
||||
const std::map<MACHO_SECTION_FLAGS, const char*> enumStrings {
|
||||
CONST_MAP(MACHO_SECTION_FLAGS, const char*, 10) enumStrings {
|
||||
{ MACHO_SECTION_FLAGS::S_ATTR_PURE_INSTRUCTIONS, "PURE_INSTRUCTIONS"},
|
||||
{ MACHO_SECTION_FLAGS::S_ATTR_NO_TOC, "NO_TOC"},
|
||||
{ MACHO_SECTION_FLAGS::S_ATTR_STRIP_STATIC_SYMS, "STRIP_STATIC_SYMS"},
|
||||
@ -208,7 +208,7 @@ const char* to_string(MACHO_SECTION_FLAGS e) {
|
||||
|
||||
|
||||
const char* to_string(MACHO_SYMBOL_TYPES e) {
|
||||
const std::map<MACHO_SYMBOL_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(MACHO_SYMBOL_TYPES, const char*, 4) enumStrings {
|
||||
{ MACHO_SYMBOL_TYPES::N_STAB, "STAB"},
|
||||
{ MACHO_SYMBOL_TYPES::N_PEXT, "PEXT"},
|
||||
{ MACHO_SYMBOL_TYPES::N_TYPE, "TYPE"},
|
||||
@ -219,7 +219,7 @@ const char* to_string(MACHO_SYMBOL_TYPES e) {
|
||||
}
|
||||
|
||||
const char* to_string(N_LIST_TYPES e) {
|
||||
const std::map<N_LIST_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(N_LIST_TYPES, const char*, 5) enumStrings {
|
||||
{ N_LIST_TYPES::N_UNDF, "UNDF"},
|
||||
{ N_LIST_TYPES::N_ABS, "ABS"},
|
||||
{ N_LIST_TYPES::N_SECT, "SECT"},
|
||||
@ -231,7 +231,7 @@ const char* to_string(N_LIST_TYPES e) {
|
||||
}
|
||||
|
||||
const char* to_string(SYMBOL_DESCRIPTIONS e) {
|
||||
const std::map<SYMBOL_DESCRIPTIONS, const char*> enumStrings {
|
||||
CONST_MAP(SYMBOL_DESCRIPTIONS, const char*, 17) enumStrings {
|
||||
{ SYMBOL_DESCRIPTIONS::REFERENCE_FLAG_UNDEFINED_NON_LAZY, "FLAG_UNDEFINED_NON_LAZY"},
|
||||
{ SYMBOL_DESCRIPTIONS::REFERENCE_FLAG_UNDEFINED_LAZY, "FLAG_UNDEFINED_LAZY"},
|
||||
{ SYMBOL_DESCRIPTIONS::REFERENCE_FLAG_DEFINED, "FLAG_DEFINED"},
|
||||
@ -255,7 +255,7 @@ const char* to_string(SYMBOL_DESCRIPTIONS e) {
|
||||
}
|
||||
|
||||
const char* to_string(X86_RELOCATION e) {
|
||||
const std::map<X86_RELOCATION, const char*> enumStrings {
|
||||
CONST_MAP(X86_RELOCATION, const char*, 6) enumStrings {
|
||||
{ X86_RELOCATION::GENERIC_RELOC_VANILLA, "VANILLA" },
|
||||
{ X86_RELOCATION::GENERIC_RELOC_PAIR, "PAIR" },
|
||||
{ X86_RELOCATION::GENERIC_RELOC_SECTDIFF, "SECTDIFF" },
|
||||
@ -269,7 +269,7 @@ const char* to_string(X86_RELOCATION e) {
|
||||
|
||||
|
||||
const char* to_string(X86_64_RELOCATION e) {
|
||||
const std::map<X86_64_RELOCATION, const char*> enumStrings {
|
||||
CONST_MAP(X86_64_RELOCATION, const char*, 10) enumStrings {
|
||||
{ X86_64_RELOCATION::X86_64_RELOC_UNSIGNED, "UNSIGNED" },
|
||||
{ X86_64_RELOCATION::X86_64_RELOC_SIGNED, "SIGNED" },
|
||||
{ X86_64_RELOCATION::X86_64_RELOC_BRANCH, "BRANCH" },
|
||||
@ -287,7 +287,7 @@ const char* to_string(X86_64_RELOCATION e) {
|
||||
|
||||
|
||||
const char* to_string(PPC_RELOCATION e) {
|
||||
const std::map<PPC_RELOCATION, const char*> enumStrings {
|
||||
CONST_MAP(PPC_RELOCATION, const char*, 16) enumStrings {
|
||||
{ PPC_RELOCATION::PPC_RELOC_VANILLA, "VANILLA" },
|
||||
{ PPC_RELOCATION::PPC_RELOC_PAIR, "PAIR" },
|
||||
{ PPC_RELOCATION::PPC_RELOC_BR14, "BR14" },
|
||||
@ -311,7 +311,7 @@ const char* to_string(PPC_RELOCATION e) {
|
||||
|
||||
|
||||
const char* to_string(ARM_RELOCATION e) {
|
||||
const std::map<ARM_RELOCATION, const char*> enumStrings {
|
||||
CONST_MAP(ARM_RELOCATION, const char*, 10) enumStrings {
|
||||
{ ARM_RELOCATION::ARM_RELOC_VANILLA, "VANILLA" },
|
||||
{ ARM_RELOCATION::ARM_RELOC_PAIR, "PAIR" },
|
||||
{ ARM_RELOCATION::ARM_RELOC_SECTDIFF, "SECTDIFF" },
|
||||
@ -329,7 +329,7 @@ const char* to_string(ARM_RELOCATION e) {
|
||||
|
||||
|
||||
const char* to_string(ARM64_RELOCATION e) {
|
||||
const std::map<ARM64_RELOCATION, const char*> enumStrings {
|
||||
CONST_MAP(ARM64_RELOCATION, const char*, 11) enumStrings {
|
||||
{ ARM64_RELOCATION::ARM64_RELOC_UNSIGNED, "UNSIGNED" },
|
||||
{ ARM64_RELOCATION::ARM64_RELOC_SUBTRACTOR, "SUBTRACTOR" },
|
||||
{ ARM64_RELOCATION::ARM64_RELOC_BRANCH26, "BRANCH26" },
|
||||
@ -347,7 +347,7 @@ const char* to_string(ARM64_RELOCATION e) {
|
||||
}
|
||||
|
||||
const char* to_string(RELOCATION_ORIGINS e) {
|
||||
const std::map<RELOCATION_ORIGINS, const char*> enumStrings {
|
||||
CONST_MAP(RELOCATION_ORIGINS, const char*, 3) enumStrings {
|
||||
{ RELOCATION_ORIGINS::ORIGIN_UNKNOWN, "UNKNOWN" },
|
||||
{ RELOCATION_ORIGINS::ORIGIN_DYLDINFO, "DYLDINFO" },
|
||||
{ RELOCATION_ORIGINS::ORIGIN_RELOC_TABLE, "RELOC_TABLE" },
|
||||
@ -357,7 +357,7 @@ const char* to_string(RELOCATION_ORIGINS e) {
|
||||
}
|
||||
|
||||
const char* to_string(REBASE_TYPES e) {
|
||||
const std::map<REBASE_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(REBASE_TYPES, const char*, 3) enumStrings {
|
||||
{ REBASE_TYPES::REBASE_TYPE_POINTER, "POINTER" },
|
||||
{ REBASE_TYPES::REBASE_TYPE_TEXT_ABSOLUTE32, "TEXT_ABSOLUTE32" },
|
||||
{ REBASE_TYPES::REBASE_TYPE_TEXT_PCREL32, "TEXT_PCREL32" },
|
||||
@ -368,7 +368,7 @@ const char* to_string(REBASE_TYPES e) {
|
||||
|
||||
|
||||
const char* to_string(BINDING_CLASS e) {
|
||||
const std::map<BINDING_CLASS, const char*> enumStrings {
|
||||
CONST_MAP(BINDING_CLASS, const char*, 3) enumStrings {
|
||||
{ BINDING_CLASS::BIND_CLASS_WEAK, "WEAK" },
|
||||
{ BINDING_CLASS::BIND_CLASS_LAZY, "LAZY" },
|
||||
{ BINDING_CLASS::BIND_CLASS_STANDARD, "STANDARD" },
|
||||
@ -379,7 +379,7 @@ const char* to_string(BINDING_CLASS e) {
|
||||
|
||||
|
||||
const char* to_string(REBASE_OPCODES e) {
|
||||
const std::map<REBASE_OPCODES, const char*> enumStrings {
|
||||
CONST_MAP(REBASE_OPCODES, const char*, 9) enumStrings {
|
||||
{ REBASE_OPCODES::REBASE_OPCODE_DONE, "DONE" },
|
||||
{ REBASE_OPCODES::REBASE_OPCODE_SET_TYPE_IMM, "SET_TYPE_IMM" },
|
||||
{ REBASE_OPCODES::REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB, "SET_SEGMENT_AND_OFFSET_ULEB" },
|
||||
@ -396,7 +396,7 @@ const char* to_string(REBASE_OPCODES e) {
|
||||
|
||||
|
||||
const char* to_string(BIND_TYPES e) {
|
||||
const std::map<BIND_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(BIND_TYPES, const char*, 3) enumStrings {
|
||||
{ BIND_TYPES::BIND_TYPE_POINTER, "POINTER" },
|
||||
{ BIND_TYPES::BIND_TYPE_TEXT_ABSOLUTE32, "TEXT_ABSOLUTE32" },
|
||||
{ BIND_TYPES::BIND_TYPE_TEXT_PCREL32, "TEXT_PCREL32" },
|
||||
@ -407,7 +407,7 @@ const char* to_string(BIND_TYPES e) {
|
||||
|
||||
|
||||
const char* to_string(BIND_SPECIAL_DYLIB e) {
|
||||
const std::map<BIND_SPECIAL_DYLIB, const char*> enumStrings {
|
||||
CONST_MAP(BIND_SPECIAL_DYLIB, const char*, 3) enumStrings {
|
||||
{ BIND_SPECIAL_DYLIB::BIND_SPECIAL_DYLIB_SELF, "SELF" },
|
||||
{ BIND_SPECIAL_DYLIB::BIND_SPECIAL_DYLIB_MAIN_EXECUTABLE, "MAIN_EXECUTABLE" },
|
||||
{ BIND_SPECIAL_DYLIB::BIND_SPECIAL_DYLIB_FLAT_LOOKUP, "FLAT_LOOKUP" },
|
||||
@ -418,7 +418,7 @@ const char* to_string(BIND_SPECIAL_DYLIB e) {
|
||||
|
||||
|
||||
const char* to_string(BIND_OPCODES e) {
|
||||
const std::map<BIND_OPCODES, const char*> enumStrings {
|
||||
CONST_MAP(BIND_OPCODES, const char*, 13) enumStrings {
|
||||
{ BIND_OPCODES::BIND_OPCODE_DONE, "DONE" },
|
||||
{ BIND_OPCODES::BIND_OPCODE_SET_DYLIB_ORDINAL_IMM, "SET_DYLIB_ORDINAL_IMM" },
|
||||
{ BIND_OPCODES::BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB, "SET_DYLIB_ORDINAL_ULEB" },
|
||||
@ -439,7 +439,7 @@ const char* to_string(BIND_OPCODES e) {
|
||||
|
||||
|
||||
const char* to_string(EXPORT_SYMBOL_KINDS e) {
|
||||
const std::map<EXPORT_SYMBOL_KINDS, const char*> enumStrings {
|
||||
CONST_MAP(EXPORT_SYMBOL_KINDS, const char*, 3) enumStrings {
|
||||
{ EXPORT_SYMBOL_KINDS::EXPORT_SYMBOL_FLAGS_KIND_REGULAR, "REGULAR" },
|
||||
{ EXPORT_SYMBOL_KINDS::EXPORT_SYMBOL_FLAGS_KIND_THREAD_LOCAL, "THREAD_LOCAL" },
|
||||
{ EXPORT_SYMBOL_KINDS::EXPORT_SYMBOL_FLAGS_KIND_ABSOLUTE, "ABSOLUTE" },
|
||||
@ -450,7 +450,7 @@ const char* to_string(EXPORT_SYMBOL_KINDS e) {
|
||||
|
||||
|
||||
const char* to_string(VM_PROTECTIONS e) {
|
||||
const std::map<VM_PROTECTIONS, const char*> enumStrings {
|
||||
CONST_MAP(VM_PROTECTIONS, const char*, 3) enumStrings {
|
||||
{ VM_PROTECTIONS::VM_PROT_READ, "READ" },
|
||||
{ VM_PROTECTIONS::VM_PROT_WRITE, "WRITE" },
|
||||
{ VM_PROTECTIONS::VM_PROT_EXECUTE, "EXECUTE" },
|
||||
@ -461,7 +461,7 @@ const char* to_string(VM_PROTECTIONS e) {
|
||||
|
||||
|
||||
const char* to_string(SYMBOL_ORIGINS e) {
|
||||
const std::map<SYMBOL_ORIGINS, const char*> enumStrings {
|
||||
CONST_MAP(SYMBOL_ORIGINS, const char*, 3) enumStrings {
|
||||
{ SYMBOL_ORIGINS::SYM_ORIGIN_UNKNOWN, "UNKNOWN" },
|
||||
{ SYMBOL_ORIGINS::SYM_ORIGIN_DYLD_EXPORT, "DYLD_EXPORT" },
|
||||
{ SYMBOL_ORIGINS::SYM_ORIGIN_LC_SYMTAB, "LC_SYMTAB" },
|
||||
|
@ -15,13 +15,14 @@
|
||||
*/
|
||||
#include "LIEF/PE/Structures.hpp"
|
||||
#include "LIEF/PE/EnumToString.hpp"
|
||||
#include <map>
|
||||
|
||||
#include "frozen.hpp"
|
||||
|
||||
namespace LIEF {
|
||||
namespace PE {
|
||||
|
||||
const char* to_string(PE_TYPE e) {
|
||||
const std::map<PE_TYPE, const char*> enumStrings {
|
||||
CONST_MAP(PE_TYPE, const char*, 2) enumStrings {
|
||||
{ PE_TYPE::PE32, "PE32" },
|
||||
{ PE_TYPE::PE32_PLUS,"PE32_PLUS" },
|
||||
};
|
||||
@ -30,7 +31,7 @@ const char* to_string(PE_TYPE e) {
|
||||
}
|
||||
|
||||
const char* to_string(DATA_DIRECTORY e) {
|
||||
const std::map<DATA_DIRECTORY, const char*> enumStrings {
|
||||
CONST_MAP(DATA_DIRECTORY, const char*, 15) enumStrings {
|
||||
{ DATA_DIRECTORY::EXPORT_TABLE, "EXPORT_TABLE" },
|
||||
{ DATA_DIRECTORY::IMPORT_TABLE, "IMPORT_TABLE" },
|
||||
{ DATA_DIRECTORY::RESOURCE_TABLE, "RESOURCE_TABLE" },
|
||||
@ -53,7 +54,7 @@ const char* to_string(DATA_DIRECTORY e) {
|
||||
|
||||
|
||||
const char* to_string(MACHINE_TYPES e) {
|
||||
const std::map<MACHINE_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(MACHINE_TYPES, const char*, 25) enumStrings {
|
||||
{ MACHINE_TYPES::MT_Invalid, "INVALID" },
|
||||
{ MACHINE_TYPES::IMAGE_FILE_MACHINE_UNKNOWN, "UNKNOWN" },
|
||||
{ MACHINE_TYPES::IMAGE_FILE_MACHINE_AM33, "AM33" },
|
||||
@ -87,7 +88,7 @@ const char* to_string(MACHINE_TYPES e) {
|
||||
|
||||
|
||||
const char* to_string(HEADER_CHARACTERISTICS e) {
|
||||
const std::map<HEADER_CHARACTERISTICS, const char*> enumStrings {
|
||||
CONST_MAP(HEADER_CHARACTERISTICS, const char*, 15) enumStrings {
|
||||
{ HEADER_CHARACTERISTICS::IMAGE_FILE_RELOCS_STRIPPED, "RELOCS_STRIPPED" },
|
||||
{ HEADER_CHARACTERISTICS::IMAGE_FILE_EXECUTABLE_IMAGE, "EXECUTABLE_IMAGE" },
|
||||
{ HEADER_CHARACTERISTICS::IMAGE_FILE_LINE_NUMS_STRIPPED, "LINE_NUMS_STRIPPED" },
|
||||
@ -110,7 +111,7 @@ const char* to_string(HEADER_CHARACTERISTICS e) {
|
||||
|
||||
|
||||
const char* to_string(SUBSYSTEM e) {
|
||||
const std::map<SUBSYSTEM, const char*> enumStrings {
|
||||
CONST_MAP(SUBSYSTEM, const char*, 14) enumStrings {
|
||||
{ SUBSYSTEM::IMAGE_SUBSYSTEM_UNKNOWN, "UNKNOWN" },
|
||||
{ SUBSYSTEM::IMAGE_SUBSYSTEM_NATIVE, "NATIVE" },
|
||||
{ SUBSYSTEM::IMAGE_SUBSYSTEM_WINDOWS_GUI, "WINDOWS_GUI" },
|
||||
@ -132,7 +133,7 @@ const char* to_string(SUBSYSTEM e) {
|
||||
|
||||
|
||||
const char* to_string(DLL_CHARACTERISTICS e) {
|
||||
const std::map<DLL_CHARACTERISTICS, const char*> enumStrings {
|
||||
CONST_MAP(DLL_CHARACTERISTICS, const char*, 11) enumStrings {
|
||||
{ DLL_CHARACTERISTICS::IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA, "HIGH_ENTROPY_VA" },
|
||||
{ DLL_CHARACTERISTICS::IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE, "DYNAMIC_BASE" },
|
||||
{ DLL_CHARACTERISTICS::IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY, "FORCE_INTEGRITY" },
|
||||
@ -151,7 +152,7 @@ const char* to_string(DLL_CHARACTERISTICS e) {
|
||||
|
||||
|
||||
const char* to_string(SECTION_CHARACTERISTICS e) {
|
||||
const std::map<SECTION_CHARACTERISTICS, const char*> enumStrings {
|
||||
CONST_MAP(SECTION_CHARACTERISTICS, const char*, 35) enumStrings {
|
||||
{ SECTION_CHARACTERISTICS::IMAGE_SCN_TYPE_NO_PAD, "TYPE_NO_PAD" },
|
||||
{ SECTION_CHARACTERISTICS::IMAGE_SCN_CNT_CODE, "CNT_CODE" },
|
||||
{ SECTION_CHARACTERISTICS::IMAGE_SCN_CNT_INITIALIZED_DATA, "CNT_INITIALIZED_DATA" },
|
||||
@ -194,7 +195,7 @@ const char* to_string(SECTION_CHARACTERISTICS e) {
|
||||
|
||||
|
||||
const char* to_string(PE_SECTION_TYPES e) {
|
||||
const std::map<PE_SECTION_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(PE_SECTION_TYPES, const char*, 10) enumStrings {
|
||||
{ PE_SECTION_TYPES::TEXT, "TEXT" },
|
||||
{ PE_SECTION_TYPES::TLS, "TLS_" },
|
||||
{ PE_SECTION_TYPES::IMPORT, "IDATA" },
|
||||
@ -211,7 +212,7 @@ const char* to_string(PE_SECTION_TYPES e) {
|
||||
}
|
||||
|
||||
const char* to_string(SYMBOL_BASE_TYPES e) {
|
||||
const std::map<SYMBOL_BASE_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(SYMBOL_BASE_TYPES, const char*, 16) enumStrings {
|
||||
{ SYMBOL_BASE_TYPES::IMAGE_SYM_TYPE_NULL, "NULL" },
|
||||
{ SYMBOL_BASE_TYPES::IMAGE_SYM_TYPE_VOID, "VOID" },
|
||||
{ SYMBOL_BASE_TYPES::IMAGE_SYM_TYPE_CHAR, "CHAR" },
|
||||
@ -234,7 +235,7 @@ const char* to_string(SYMBOL_BASE_TYPES e) {
|
||||
}
|
||||
|
||||
const char* to_string(SYMBOL_COMPLEX_TYPES e) {
|
||||
const std::map<SYMBOL_COMPLEX_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(SYMBOL_COMPLEX_TYPES, const char*, 5) enumStrings {
|
||||
{ SYMBOL_COMPLEX_TYPES::IMAGE_SYM_DTYPE_NULL, "NULL" },
|
||||
{ SYMBOL_COMPLEX_TYPES::IMAGE_SYM_DTYPE_POINTER, "POINTER" },
|
||||
{ SYMBOL_COMPLEX_TYPES::IMAGE_SYM_DTYPE_FUNCTION, "FUNCTION" },
|
||||
@ -247,7 +248,7 @@ const char* to_string(SYMBOL_COMPLEX_TYPES e) {
|
||||
|
||||
|
||||
const char* to_string(SYMBOL_SECTION_NUMBER e) {
|
||||
const std::map<SYMBOL_SECTION_NUMBER, const char*> enumStrings {
|
||||
CONST_MAP(SYMBOL_SECTION_NUMBER, const char*, 3) enumStrings {
|
||||
{ SYMBOL_SECTION_NUMBER::IMAGE_SYM_DEBUG, "DEBUG" },
|
||||
{ SYMBOL_SECTION_NUMBER::IMAGE_SYM_ABSOLUTE, "ABSOLUTE" },
|
||||
{ SYMBOL_SECTION_NUMBER::IMAGE_SYM_UNDEFINED, "UNDEFINED" },
|
||||
@ -258,7 +259,7 @@ const char* to_string(SYMBOL_SECTION_NUMBER e) {
|
||||
|
||||
|
||||
const char* to_string(SYMBOL_STORAGE_CLASS e) {
|
||||
const std::map<SYMBOL_STORAGE_CLASS, const char*> enumStrings {
|
||||
CONST_MAP(SYMBOL_STORAGE_CLASS, const char*, 24) enumStrings {
|
||||
{ SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_END_OF_FUNCTION, "END_OF_FUNCTION" },
|
||||
{ SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_NULL, "NULL" },
|
||||
{ SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_AUTOMATIC, "AUTOMATIC" },
|
||||
@ -290,7 +291,7 @@ const char* to_string(SYMBOL_STORAGE_CLASS e) {
|
||||
|
||||
|
||||
const char* to_string(RELOCATIONS_I386 e) {
|
||||
const std::map<RELOCATIONS_I386, const char*> enumStrings {
|
||||
CONST_MAP(RELOCATIONS_I386, const char*, 11) enumStrings {
|
||||
{ RELOCATIONS_I386::IMAGE_REL_I386_ABSOLUTE, "ABSOLUTE" },
|
||||
{ RELOCATIONS_I386::IMAGE_REL_I386_DIR16, "DIR16" },
|
||||
{ RELOCATIONS_I386::IMAGE_REL_I386_REL16, "REL16" },
|
||||
@ -311,7 +312,7 @@ const char* to_string(RELOCATIONS_I386 e) {
|
||||
|
||||
|
||||
const char* to_string(RELOCATIONS_AMD64 e) {
|
||||
const std::map<RELOCATIONS_AMD64, const char*> enumStrings {
|
||||
CONST_MAP(RELOCATIONS_AMD64, const char*, 17) enumStrings {
|
||||
{ RELOCATIONS_AMD64::IMAGE_REL_AMD64_ABSOLUTE, "ABSOLUTE" },
|
||||
{ RELOCATIONS_AMD64::IMAGE_REL_AMD64_ADDR64, "ADDR64" },
|
||||
{ RELOCATIONS_AMD64::IMAGE_REL_AMD64_ADDR32, "ADDR32" },
|
||||
@ -338,7 +339,7 @@ const char* to_string(RELOCATIONS_AMD64 e) {
|
||||
|
||||
|
||||
const char* to_string(RELOCATIONS_ARM e) {
|
||||
const std::map<RELOCATIONS_ARM, const char*> enumStrings {
|
||||
CONST_MAP(RELOCATIONS_ARM, const char*, 15) enumStrings {
|
||||
{ RELOCATIONS_ARM::IMAGE_REL_ARM_ABSOLUTE, "ABSOLUTE" },
|
||||
{ RELOCATIONS_ARM::IMAGE_REL_ARM_ADDR32, "ADDR32" },
|
||||
{ RELOCATIONS_ARM::IMAGE_REL_ARM_ADDR32NB, "ADDR32NB" },
|
||||
@ -362,7 +363,7 @@ const char* to_string(RELOCATIONS_ARM e) {
|
||||
|
||||
|
||||
const char* to_string(RELOCATIONS_BASE_TYPES e) {
|
||||
const std::map<RELOCATIONS_BASE_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(RELOCATIONS_BASE_TYPES, const char*, 12) enumStrings {
|
||||
{ RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_ABSOLUTE, "ABSOLUTE" },
|
||||
{ RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_HIGH, "HIGH" },
|
||||
{ RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_LOW, "LOW" },
|
||||
@ -384,7 +385,7 @@ const char* to_string(RELOCATIONS_BASE_TYPES e) {
|
||||
|
||||
|
||||
const char* to_string(DEBUG_TYPES e) {
|
||||
const std::map<DEBUG_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(DEBUG_TYPES, const char*, 16) enumStrings {
|
||||
{ DEBUG_TYPES::IMAGE_DEBUG_TYPE_UNKNOWN, "UNKNOWN" },
|
||||
{ DEBUG_TYPES::IMAGE_DEBUG_TYPE_COFF, "COFF" },
|
||||
{ DEBUG_TYPES::IMAGE_DEBUG_TYPE_CODEVIEW, "CODEVIEW" },
|
||||
@ -409,7 +410,7 @@ const char* to_string(DEBUG_TYPES e) {
|
||||
|
||||
|
||||
const char* to_string(RESOURCE_TYPES e) {
|
||||
const std::map<RESOURCE_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(RESOURCE_TYPES, const char*, 21) enumStrings {
|
||||
{ RESOURCE_TYPES::CURSOR, "CURSOR" },
|
||||
{ RESOURCE_TYPES::BITMAP, "BITMAP" },
|
||||
{ RESOURCE_TYPES::ICON, "ICON" },
|
||||
@ -438,7 +439,7 @@ const char* to_string(RESOURCE_TYPES e) {
|
||||
}
|
||||
|
||||
const char* to_string(RESOURCE_LANGS e) {
|
||||
const std::map<RESOURCE_LANGS, const char*> enumStrings {
|
||||
CONST_MAP(RESOURCE_LANGS, const char*, 103) enumStrings {
|
||||
{ RESOURCE_LANGS::LANG_NEUTRAL, "NEUTRAL" },
|
||||
{ RESOURCE_LANGS::LANG_INVARIANT, "INVARIANT" },
|
||||
{ RESOURCE_LANGS::LANG_AFRIKAANS, "AFRIKAANS" },
|
||||
@ -549,7 +550,7 @@ const char* to_string(RESOURCE_LANGS e) {
|
||||
}
|
||||
|
||||
const char* to_string(RESOURCE_SUBLANGS e) {
|
||||
const std::map<RESOURCE_SUBLANGS, const char*> enumStrings {
|
||||
CONST_MAP(RESOURCE_SUBLANGS, const char*, 229) enumStrings {
|
||||
{ RESOURCE_SUBLANGS::SUBLANG_AFRIKAANS_SOUTH_AFRICA, "AFRIKAANS_SOUTH_AFRICA" },
|
||||
{ RESOURCE_SUBLANGS::SUBLANG_ALBANIAN_ALBANIA, "ALBANIAN_ALBANIA" },
|
||||
{ RESOURCE_SUBLANGS::SUBLANG_ALSATIAN_FRANCE, "ALSATIAN_FRANCE" },
|
||||
@ -786,7 +787,7 @@ const char* to_string(RESOURCE_SUBLANGS e) {
|
||||
}
|
||||
|
||||
const char* to_string(EXTENDED_WINDOW_STYLES e) {
|
||||
const std::map<EXTENDED_WINDOW_STYLES, const char*> enumStrings {
|
||||
CONST_MAP(EXTENDED_WINDOW_STYLES, const char*, 19) enumStrings {
|
||||
{ EXTENDED_WINDOW_STYLES::WS_EX_DLGMODALFRAME, "DLGMODALFRAME" },
|
||||
{ EXTENDED_WINDOW_STYLES::WS_EX_NOPARENTNOTIFY, "NOPARENTNOTIFY" },
|
||||
{ EXTENDED_WINDOW_STYLES::WS_EX_TOPMOST, "TOPMOST" },
|
||||
@ -814,7 +815,7 @@ const char* to_string(EXTENDED_WINDOW_STYLES e) {
|
||||
|
||||
|
||||
const char* to_string(WINDOW_STYLES e) {
|
||||
const std::map<WINDOW_STYLES, const char*> enumStrings {
|
||||
CONST_MAP(WINDOW_STYLES, const char*, 20) enumStrings {
|
||||
{ WINDOW_STYLES::WS_OVERLAPPED, "OVERLAPPED" },
|
||||
{ WINDOW_STYLES::WS_POPUP, "POPUP" },
|
||||
{ WINDOW_STYLES::WS_CHILD, "CHILD" },
|
||||
@ -843,7 +844,7 @@ const char* to_string(WINDOW_STYLES e) {
|
||||
|
||||
|
||||
const char* to_string(DIALOG_BOX_STYLES e) {
|
||||
const std::map<DIALOG_BOX_STYLES, const char*> enumStrings {
|
||||
CONST_MAP(DIALOG_BOX_STYLES, const char*, 15) enumStrings {
|
||||
{ DIALOG_BOX_STYLES::DS_ABSALIGN, "ABSALIGN" },
|
||||
{ DIALOG_BOX_STYLES::DS_SYSMODAL, "SYSMODAL" },
|
||||
{ DIALOG_BOX_STYLES::DS_LOCALEDIT, "LOCALEDIT" },
|
||||
@ -867,7 +868,7 @@ const char* to_string(DIALOG_BOX_STYLES e) {
|
||||
|
||||
|
||||
const char* to_string(FIXED_VERSION_OS e) {
|
||||
const std::map<FIXED_VERSION_OS, const char*> enumStrings {
|
||||
CONST_MAP(FIXED_VERSION_OS, const char*, 14) enumStrings {
|
||||
{ FIXED_VERSION_OS::VOS_UNKNOWN, "UNKNOWN" },
|
||||
{ FIXED_VERSION_OS::VOS_DOS, "DOS" },
|
||||
{ FIXED_VERSION_OS::VOS_NT, "NT" },
|
||||
@ -889,7 +890,7 @@ const char* to_string(FIXED_VERSION_OS e) {
|
||||
|
||||
|
||||
const char* to_string(FIXED_VERSION_FILE_FLAGS e) {
|
||||
const std::map<FIXED_VERSION_FILE_FLAGS, const char*> enumStrings {
|
||||
CONST_MAP(FIXED_VERSION_FILE_FLAGS, const char*, 6) enumStrings {
|
||||
{ FIXED_VERSION_FILE_FLAGS::VS_FF_DEBUG, "DEBUG" },
|
||||
{ FIXED_VERSION_FILE_FLAGS::VS_FF_INFOINFERRED, "INFOINFERRED" },
|
||||
{ FIXED_VERSION_FILE_FLAGS::VS_FF_PATCHED, "PATCHED" },
|
||||
@ -903,7 +904,7 @@ const char* to_string(FIXED_VERSION_FILE_FLAGS e) {
|
||||
|
||||
|
||||
const char* to_string(FIXED_VERSION_FILE_TYPES e) {
|
||||
const std::map<FIXED_VERSION_FILE_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(FIXED_VERSION_FILE_TYPES, const char*, 7) enumStrings {
|
||||
{ FIXED_VERSION_FILE_TYPES::VFT_APP, "APP" },
|
||||
{ FIXED_VERSION_FILE_TYPES::VFT_DLL, "DLL" },
|
||||
{ FIXED_VERSION_FILE_TYPES::VFT_DRV, "DRV" },
|
||||
@ -918,7 +919,7 @@ const char* to_string(FIXED_VERSION_FILE_TYPES e) {
|
||||
|
||||
|
||||
const char* to_string(FIXED_VERSION_FILE_SUB_TYPES e) {
|
||||
const std::map<FIXED_VERSION_FILE_SUB_TYPES, const char*> enumStrings {
|
||||
CONST_MAP(FIXED_VERSION_FILE_SUB_TYPES, const char*, 15) enumStrings {
|
||||
{ FIXED_VERSION_FILE_SUB_TYPES::VFT2_DRV_COMM, "DRV_COMM" },
|
||||
{ FIXED_VERSION_FILE_SUB_TYPES::VFT2_DRV_DISPLAY, "DRV_DISPLAY" },
|
||||
{ FIXED_VERSION_FILE_SUB_TYPES::VFT2_DRV_INSTALLABLE, "DRV_INSTALLABLE" },
|
||||
@ -940,7 +941,7 @@ const char* to_string(FIXED_VERSION_FILE_SUB_TYPES e) {
|
||||
}
|
||||
|
||||
const char* to_string(CODE_PAGES e) {
|
||||
const std::map<CODE_PAGES, const char*> enumStrings {
|
||||
CONST_MAP(CODE_PAGES, const char*, 140) enumStrings {
|
||||
{ CODE_PAGES::CP_IBM037, "IBM037"},
|
||||
{ CODE_PAGES::CP_IBM437, "IBM437"},
|
||||
{ CODE_PAGES::CP_IBM500, "IBM500"},
|
||||
@ -1089,7 +1090,7 @@ const char* to_string(CODE_PAGES e) {
|
||||
|
||||
|
||||
const char* to_string(WIN_VERSION e) {
|
||||
const std::map<WIN_VERSION, const char*> enumStrings {
|
||||
CONST_MAP(WIN_VERSION, const char*, 9) enumStrings {
|
||||
{ WIN_VERSION::WIN_UNKNOWN, "UNKNOWN" },
|
||||
{ WIN_VERSION::WIN_SEH, "SEH" },
|
||||
{ WIN_VERSION::WIN8_1, "WIN_8_1" },
|
||||
@ -1106,7 +1107,7 @@ const char* to_string(WIN_VERSION e) {
|
||||
|
||||
|
||||
const char* to_string(GUARD_CF_FLAGS e) {
|
||||
const std::map<GUARD_CF_FLAGS, const char*> enumStrings {
|
||||
CONST_MAP(GUARD_CF_FLAGS, const char*, 7) enumStrings {
|
||||
{ GUARD_CF_FLAGS::GCF_NONE, "NONE" },
|
||||
{ GUARD_CF_FLAGS::GCF_INSTRUMENTED, "INSTRUMENTED" },
|
||||
{ GUARD_CF_FLAGS::GCF_W_INSTRUMENTED, "W_INSTRUMENTED" },
|
||||
@ -1121,7 +1122,7 @@ const char* to_string(GUARD_CF_FLAGS e) {
|
||||
|
||||
|
||||
const char* to_string(GUARD_RF_FLAGS e) {
|
||||
const std::map<GUARD_RF_FLAGS, const char*> enumStrings {
|
||||
CONST_MAP(GUARD_RF_FLAGS, const char*, 3) enumStrings {
|
||||
{ GUARD_RF_FLAGS::GRF_INSTRUMENTED, "INSTRUMENTED" },
|
||||
{ GUARD_RF_FLAGS::GRF_ENABLE, "ENABLE" },
|
||||
{ GUARD_RF_FLAGS::GRF_STRICT, "STRICT" },
|
||||
@ -1132,7 +1133,7 @@ const char* to_string(GUARD_RF_FLAGS e) {
|
||||
|
||||
|
||||
const char* to_string(CODE_VIEW_SIGNATURES e) {
|
||||
const std::map<CODE_VIEW_SIGNATURES, const char*> enumStrings {
|
||||
CONST_MAP(CODE_VIEW_SIGNATURES, const char*, 5) enumStrings {
|
||||
{ CODE_VIEW_SIGNATURES::CVS_UNKNOWN, "UNKNOWN" },
|
||||
{ CODE_VIEW_SIGNATURES::CVS_PDB_70, "PDB_70" },
|
||||
{ CODE_VIEW_SIGNATURES::CVS_PDB_20, "PDB_20" },
|
||||
|
@ -17,6 +17,7 @@
|
||||
#define LIEF_PE_UTILS_LIBRARY_TABLE_H_
|
||||
|
||||
#include <map>
|
||||
#include "frozen.hpp"
|
||||
|
||||
#include "kernel32_dll_lookup.hpp"
|
||||
#include "ntdll_dll_lookup.hpp"
|
||||
|
@ -17,6 +17,7 @@
|
||||
#define LIEF_PE_WS2_32_DLL_LOOKUP_H_
|
||||
|
||||
#include <map>
|
||||
#include "frozen.hpp"
|
||||
|
||||
namespace LIEF {
|
||||
namespace PE {
|
||||
|
23
src/compiler_support.h.in
Normal file
23
src/compiler_support.h.in
Normal file
@ -0,0 +1,23 @@
|
||||
/* 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.
|
||||
*/
|
||||
#ifndef LIEF_COMPILER_SUPPORT_H_
|
||||
#define LIEF_COMPILER_SUPPORT_H_
|
||||
|
||||
#define LIEF_SUPPORT_CXX11 @LIEF_SUPPORT_CXX11@
|
||||
#define LIEF_SUPPORT_CXX14 @LIEF_SUPPORT_CXX14@
|
||||
#define LIEF_SUPPORT_CXX17 @LIEF_SUPPORT_CXX17@
|
||||
|
||||
#endif
|
29
src/frozen.hpp
Normal file
29
src/frozen.hpp
Normal file
@ -0,0 +1,29 @@
|
||||
/* 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.
|
||||
*/
|
||||
#ifndef LIEF_FROZEN_H_
|
||||
#define LIEF_FROZEN_H_
|
||||
#include "LIEF/config.h"
|
||||
#include "compiler_support.h"
|
||||
|
||||
#ifdef LIEF_FROZEN_ENABLED
|
||||
#include <frozen/map.h>
|
||||
#define CONST_MAP(KEY, VAL, NUM) constexpr frozen::map<KEY, VAL, NUM>
|
||||
#else
|
||||
#include <map>
|
||||
#define CONST_MAP(KEY, VAL, NUM) static const std::map<KEY, VAL>
|
||||
#endif
|
||||
|
||||
#endif
|
BIN
third-party/frozen-2f608b5.zip
vendored
Normal file
BIN
third-party/frozen-2f608b5.zip
vendored
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user