Fixed one crash issue, added another

This commit is contained in:
G0lge
2024-03-22 19:00:00 +03:00
parent 167025e2c2
commit fad40cd0b1
21 changed files with 67290 additions and 1190 deletions
+6
View File
@@ -0,0 +1,6 @@
# cmkr
/**/CMakeLists.txt linguist-generated
/**/cmkr.cmake linguist-vendored
# Zydis
/**/Zydis/Zydis.c linguist-vendored
/**/Zydis/Zydis.h linguist-vendored
+6 -2
View File
@@ -14,5 +14,9 @@
*.iobj
*\x64*
*.exe*
*.sln
*vcxproj*
# cmkr
build*/
cmake-build*/
CMakerLists.txt
CMakeLists.txt.user
+3
View File
@@ -0,0 +1,3 @@
[submodule "linux-pe"]
path = linux-pe
url = https://github.com/can1357/linux-pe
+98
View File
@@ -0,0 +1,98 @@
# This file is automatically generated from cmake.toml - DO NOT EDIT
# See https://github.com/build-cpp/cmkr for more information
cmake_minimum_required(VERSION 3.16)
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
message(FATAL_ERROR "In-tree builds are not supported. Run CMake from a separate directory: cmake -B build")
endif()
set(CMKR_ROOT_PROJECT OFF)
# Variables
set(CMAKE_MODULE_PATH cmake)
project(Mergen)
# Packages
find_package(LLVM REQUIRED)
include_directories(${LLVM_INCLUDE_DIRS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fsanitize=address")
set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -g -fsanitize=address")
# Subdirectory: linux-pe
set(CMKR_CMAKE_FOLDER ${CMAKE_FOLDER})
if(CMAKE_FOLDER)
set(CMAKE_FOLDER "${CMAKE_FOLDER}/linux-pe")
else()
set(CMAKE_FOLDER linux-pe)
endif()
add_subdirectory(linux-pe)
set(CMAKE_FOLDER ${CMKR_CMAKE_FOLDER})
# Target: Zydis
set(Zydis_SOURCES
"Zydis-4.1.0/Zydis/Zydis.c"
"Zydis-4.1.0/Zydis/Zydis.h"
cmake.toml
)
add_library(Zydis STATIC)
target_sources(Zydis PRIVATE ${Zydis_SOURCES})
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${Zydis_SOURCES})
add_library(Zydis::Zydis ALIAS Zydis)
target_compile_definitions(Zydis PUBLIC
ZYCORE_STATIC_BUILD
ZYDIS_STATIC_BUILD
)
target_include_directories(Zydis PUBLIC
Zydis-4.1.0
)
target_include_directories(Zydis PRIVATE
"Zydis-4.1.0/Zydis"
)
# Target: lifter
set(lifter_SOURCES
"lifter/CustomPasses.cpp"
"lifter/LLVM-init.cpp"
"lifter/OperandUtils.cpp"
"lifter/ROPdetection.cpp"
"lifter/Semantics.cpp"
"lifter/lifter.cpp"
"lifter/nacibaba_opts.cpp"
"lifter/utils.cpp"
"lifter/CustomPasses.h"
"lifter/LLVM-init.h"
"lifter/OperandUtils.h"
"lifter/ROPdetection.h"
"lifter/Semantics.h"
"lifter/includes.h"
"lifter/nacibaba_opts.h"
"lifter/utils.h"
cmake.toml
)
add_executable(lifter)
target_sources(lifter PRIVATE ${lifter_SOURCES})
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${lifter_SOURCES})
target_compile_features(lifter PRIVATE
cxx_std_20
)
target_link_libraries(lifter PRIVATE
Zydis::Zydis
LLVM
linux-pe
)
get_directory_property(CMKR_VS_STARTUP_PROJECT DIRECTORY ${PROJECT_SOURCE_DIR} DEFINITION VS_STARTUP_PROJECT)
if(NOT CMKR_VS_STARTUP_PROJECT)
set_property(DIRECTORY ${PROJECT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT lifter)
endif()
+54990
View File
File diff suppressed because one or more lines are too long
+12113
View File
File diff suppressed because it is too large Load Diff
+29
View File
@@ -0,0 +1,29 @@
[cmake]
version = "3.16"
cmkr-include = "cmake/cmkr.cmake"
[project]
name = "Mergen"
[variables]
CMAKE_MODULE_PATH = "cmake"
[find-package.LLVM]
[subdir.linux-pe]
[target.Zydis]
type = "static"
alias = "Zydis::Zydis"
sources = ["Zydis-4.1.0/Zydis/Zydis.c"]
headers = ["Zydis-4.1.0/Zydis/Zydis.h"]
include-directories = ["Zydis-4.1.0"]
private-include-directories = ["Zydis-4.1.0/Zydis"]
compile-definitions = ["ZYCORE_STATIC_BUILD", "ZYDIS_STATIC_BUILD"]
[target.lifter]
type = "executable"
sources = ["lifter/*.cpp"]
headers = ["lifter/*.h"]
link-libraries = ["Zydis::Zydis", "LLVM", "linux-pe"]
compile-features = ["cxx_std_20"]
-65
View File
@@ -1,65 +0,0 @@
################################################################################
# Command for variable_watch. This command issues error message, if a variable
# is changed. If variable PROPERTY_READER_GUARD_DISABLED is TRUE nothing happens
# variable_watch(<variable> property_reader_guard)
################################################################################
function(property_reader_guard VARIABLE ACCESS VALUE CURRENT_LIST_FILE STACK)
if("${PROPERTY_READER_GUARD_DISABLED}")
return()
endif()
if("${ACCESS}" STREQUAL "MODIFIED_ACCESS")
message(FATAL_ERROR
" Variable ${VARIABLE} is not supposed to be changed.\n"
" It is used only for reading target property ${VARIABLE}.\n"
" Use\n"
" set_target_properties(\"<target>\" PROPERTIES \"${VARIABLE}\" \"<value>\")\n"
" or\n"
" set_target_properties(\"<target>\" PROPERTIES \"${VARIABLE}_<CONFIG>\" \"<value>\")\n"
" instead.\n")
endif()
endfunction()
################################################################################
# Create variable <name> with generator expression that expands to value of
# target property <name>_<CONFIG>. If property is empty or not set then property
# <name> is used instead. Variable <name> has watcher property_reader_guard that
# doesn't allow to edit it.
# create_property_reader(<name>)
# Input:
# name - Name of watched property and output variable
################################################################################
function(create_property_reader NAME)
set(PROPERTY_READER_GUARD_DISABLED TRUE)
set(CONFIG_VALUE "$<TARGET_GENEX_EVAL:${PROPS_TARGET},$<TARGET_PROPERTY:${PROPS_TARGET},${NAME}_$<UPPER_CASE:$<CONFIG>>>>")
set(IS_CONFIG_VALUE_EMPTY "$<STREQUAL:${CONFIG_VALUE},>")
set(GENERAL_VALUE "$<TARGET_GENEX_EVAL:${PROPS_TARGET},$<TARGET_PROPERTY:${PROPS_TARGET},${NAME}>>")
set("${NAME}" "$<IF:${IS_CONFIG_VALUE_EMPTY},${GENERAL_VALUE},${CONFIG_VALUE}>" PARENT_SCOPE)
variable_watch("${NAME}" property_reader_guard)
endfunction()
################################################################################
# Set property $<name>_${PROPS_CONFIG_U} of ${PROPS_TARGET} to <value>
# set_config_specific_property(<name> <value>)
# Input:
# name - Prefix of property name
# value - New value
################################################################################
function(set_config_specific_property NAME VALUE)
set_target_properties("${PROPS_TARGET}" PROPERTIES "${NAME}_${PROPS_CONFIG_U}" "${VALUE}")
endfunction()
################################################################################
create_property_reader("TARGET_NAME")
create_property_reader("OUTPUT_DIRECTORY")
set_config_specific_property("TARGET_NAME" "${PROPS_TARGET}")
set_config_specific_property("OUTPUT_NAME" "${TARGET_NAME}")
set_config_specific_property("ARCHIVE_OUTPUT_NAME" "${TARGET_NAME}")
set_config_specific_property("LIBRARY_OUTPUT_NAME" "${TARGET_NAME}")
set_config_specific_property("RUNTIME_OUTPUT_NAME" "${TARGET_NAME}")
set_config_specific_property("ARCHIVE_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
set_config_specific_property("LIBRARY_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
set_config_specific_property("RUNTIME_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
-12
View File
@@ -1,12 +0,0 @@
include("${CMAKE_CURRENT_LIST_DIR}/Default.cmake")
set_config_specific_property("OUTPUT_DIRECTORY" "${CMAKE_SOURCE_DIR}$<$<NOT:$<STREQUAL:${CMAKE_VS_PLATFORM_NAME},Win32>>:/${CMAKE_VS_PLATFORM_NAME}>/${PROPS_CONFIG}")
if(MSVC)
create_property_reader("DEFAULT_CXX_EXCEPTION_HANDLING")
create_property_reader("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT")
set_target_properties("${PROPS_TARGET}" PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
set_config_specific_property("DEFAULT_CXX_EXCEPTION_HANDLING" "/EHsc")
set_config_specific_property("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT" "/Zi")
endif()
-12
View File
@@ -1,12 +0,0 @@
include("${CMAKE_CURRENT_LIST_DIR}/Default.cmake")
set_config_specific_property("OUTPUT_DIRECTORY" "${CMAKE_CURRENT_SOURCE_DIR}$<$<NOT:$<STREQUAL:${CMAKE_VS_PLATFORM_NAME},Win32>>:/${CMAKE_VS_PLATFORM_NAME}>/${PROPS_CONFIG}")
get_target_property(${PROPS_TARGET}_BINARY_DIR ${PROPS_TARGET} BINARY_DIR)
set(DEFAULT_FORTRAN_MODULES_DIR "${${PROPS_TARGET}_BINARY_DIR}/${PROPS_TARGET}.Modules.dir")
set_target_properties(${PROPS_TARGET} PROPERTIES Fortran_MODULE_DIRECTORY ${DEFAULT_FORTRAN_MODULES_DIR})
if(${CMAKE_GENERATOR} MATCHES "Visual Studio")
# Hack for visual studio generator (https://gitlab.kitware.com/cmake/cmake/issues/19552)
add_custom_command(TARGET ${PROPS_TARGET} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_PROPERTY:${PROPS_TARGET},Fortran_MODULE_DIRECTORY>/${CMAKE_CFG_INTDIR})
endif()
-234
View File
@@ -1,234 +0,0 @@
# utils file for projects came from visual studio solution with cmake-converter.
################################################################################
# Wrap each token of the command with condition
################################################################################
cmake_policy(PUSH)
cmake_policy(SET CMP0054 NEW)
macro(prepare_commands)
unset(TOKEN_ROLE)
unset(COMMANDS)
foreach(TOKEN ${ARG_COMMANDS})
if("${TOKEN}" STREQUAL "COMMAND")
set(TOKEN_ROLE "KEYWORD")
elseif("${TOKEN_ROLE}" STREQUAL "KEYWORD")
set(TOKEN_ROLE "CONDITION")
elseif("${TOKEN_ROLE}" STREQUAL "CONDITION")
set(TOKEN_ROLE "COMMAND")
elseif("${TOKEN_ROLE}" STREQUAL "COMMAND")
set(TOKEN_ROLE "ARG")
endif()
if("${TOKEN_ROLE}" STREQUAL "KEYWORD")
list(APPEND COMMANDS "${TOKEN}")
elseif("${TOKEN_ROLE}" STREQUAL "CONDITION")
set(CONDITION ${TOKEN})
elseif("${TOKEN_ROLE}" STREQUAL "COMMAND")
list(APPEND COMMANDS "$<$<NOT:${CONDITION}>:${DUMMY}>$<${CONDITION}:${TOKEN}>")
elseif("${TOKEN_ROLE}" STREQUAL "ARG")
list(APPEND COMMANDS "$<${CONDITION}:${TOKEN}>")
endif()
endforeach()
endmacro()
cmake_policy(POP)
################################################################################
# Transform all the tokens to absolute paths
################################################################################
macro(prepare_output)
unset(OUTPUT)
foreach(TOKEN ${ARG_OUTPUT})
if(IS_ABSOLUTE ${TOKEN})
list(APPEND OUTPUT "${TOKEN}")
else()
list(APPEND OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${TOKEN}")
endif()
endforeach()
endmacro()
################################################################################
# Parse add_custom_command_if args.
#
# Input:
# PRE_BUILD - Pre build event option
# PRE_LINK - Pre link event option
# POST_BUILD - Post build event option
# TARGET - Target
# OUTPUT - List of output files
# DEPENDS - List of files on which the command depends
# COMMANDS - List of commands(COMMAND condition1 commannd1 args1 COMMAND
# condition2 commannd2 args2 ...)
# Output:
# OUTPUT - Output files
# DEPENDS - Files on which the command depends
# COMMENT - Comment
# PRE_BUILD - TRUE/FALSE
# PRE_LINK - TRUE/FALSE
# POST_BUILD - TRUE/FALSE
# TARGET - Target name
# COMMANDS - Prepared commands(every token is wrapped in CONDITION)
# NAME - Unique name for custom target
# STEP - PRE_BUILD/PRE_LINK/POST_BUILD
################################################################################
function(add_custom_command_if_parse_arguments)
cmake_parse_arguments("ARG" "PRE_BUILD;PRE_LINK;POST_BUILD" "TARGET;COMMENT" "DEPENDS;OUTPUT;COMMANDS" ${ARGN})
if(WIN32)
set(DUMMY "cd.")
elseif(UNIX)
set(DUMMY "true")
endif()
prepare_commands()
prepare_output()
set(DEPENDS "${ARG_DEPENDS}")
set(COMMENT "${ARG_COMMENT}")
set(PRE_BUILD "${ARG_PRE_BUILD}")
set(PRE_LINK "${ARG_PRE_LINK}")
set(POST_BUILD "${ARG_POST_BUILD}")
set(TARGET "${ARG_TARGET}")
if(PRE_BUILD)
set(STEP "PRE_BUILD")
elseif(PRE_LINK)
set(STEP "PRE_LINK")
elseif(POST_BUILD)
set(STEP "POST_BUILD")
endif()
set(NAME "${TARGET}_${STEP}")
set(OUTPUT "${OUTPUT}" PARENT_SCOPE)
set(DEPENDS "${DEPENDS}" PARENT_SCOPE)
set(COMMENT "${COMMENT}" PARENT_SCOPE)
set(PRE_BUILD "${PRE_BUILD}" PARENT_SCOPE)
set(PRE_LINK "${PRE_LINK}" PARENT_SCOPE)
set(POST_BUILD "${POST_BUILD}" PARENT_SCOPE)
set(TARGET "${TARGET}" PARENT_SCOPE)
set(COMMANDS "${COMMANDS}" PARENT_SCOPE)
set(STEP "${STEP}" PARENT_SCOPE)
set(NAME "${NAME}" PARENT_SCOPE)
endfunction()
################################################################################
# Add conditional custom command
#
# Generating Files
# The first signature is for adding a custom command to produce an output:
# add_custom_command_if(
# <OUTPUT output1 [output2 ...]>
# <COMMANDS>
# <COMMAND condition command1 [args1...]>
# [COMMAND condition command2 [args2...]]
# [DEPENDS [depends...]]
# [COMMENT comment]
#
# Build Events
# add_custom_command_if(
# <TARGET target>
# <PRE_BUILD | PRE_LINK | POST_BUILD>
# <COMMAND condition command1 [args1...]>
# [COMMAND condition command2 [args2...]]
# [COMMENT comment]
#
# Input:
# output - Output files the command is expected to produce
# condition - Generator expression for wrapping the command
# command - Command-line(s) to execute at build time.
# args - Command`s args
# depends - Files on which the command depends
# comment - Display the given message before the commands are executed at
# build time.
# PRE_BUILD - Run before any other rules are executed within the target
# PRE_LINK - Run after sources have been compiled but before linking the
# binary
# POST_BUILD - Run after all other rules within the target have been
# executed
################################################################################
function(add_custom_command_if)
add_custom_command_if_parse_arguments(${ARGN})
if(OUTPUT AND TARGET)
message(FATAL_ERROR "Wrong syntax. A TARGET and OUTPUT can not both be specified.")
endif()
if(OUTPUT)
add_custom_command(OUTPUT ${OUTPUT}
${COMMANDS}
DEPENDS ${DEPENDS}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT ${COMMENT})
elseif(TARGET)
if(PRE_BUILD AND NOT ${CMAKE_GENERATOR} MATCHES "Visual Studio")
add_custom_target(
${NAME}
${COMMANDS}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT ${COMMENT})
add_dependencies(${TARGET} ${NAME})
else()
add_custom_command(
TARGET ${TARGET}
${STEP}
${COMMANDS}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT ${COMMENT})
endif()
else()
message(FATAL_ERROR "Wrong syntax. A TARGET or OUTPUT must be specified.")
endif()
endfunction()
################################################################################
# Use props file for a target and configs
# use_props(<target> <configs...> <props_file>)
# Inside <props_file> there are following variables:
# PROPS_TARGET - <target>
# PROPS_CONFIG - One of <configs...>
# PROPS_CONFIG_U - Uppercase PROPS_CONFIG
# Input:
# target - Target to apply props file
# configs - Build configurations to apply props file
# props_file - CMake script
################################################################################
macro(use_props TARGET CONFIGS PROPS_FILE)
set(PROPS_TARGET "${TARGET}")
foreach(PROPS_CONFIG ${CONFIGS})
string(TOUPPER "${PROPS_CONFIG}" PROPS_CONFIG_U)
get_filename_component(ABSOLUTE_PROPS_FILE "${PROPS_FILE}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_LIST_DIR}")
if(EXISTS "${ABSOLUTE_PROPS_FILE}")
include("${ABSOLUTE_PROPS_FILE}")
else()
message(WARNING "Corresponding cmake file from props \"${ABSOLUTE_PROPS_FILE}\" doesn't exist")
endif()
endforeach()
endmacro()
################################################################################
# Add compile options to source file
# source_file_compile_options(<source_file> [compile_options...])
# Input:
# source_file - Source file
# compile_options - Options to add to COMPILE_FLAGS property
################################################################################
function(source_file_compile_options SOURCE_FILE)
if("${ARGC}" LESS_EQUAL "1")
return()
endif()
get_source_file_property(COMPILE_OPTIONS "${SOURCE_FILE}" COMPILE_OPTIONS)
if(COMPILE_OPTIONS)
list(APPEND COMPILE_OPTIONS ${ARGN})
else()
set(COMPILE_OPTIONS "${ARGN}")
endif()
set_source_files_properties("${SOURCE_FILE}" PROPERTIES COMPILE_OPTIONS "${COMPILE_OPTIONS}")
endfunction()
################################################################################
# Default properties of visual studio projects
################################################################################
set(DEFAULT_CXX_PROPS "${CMAKE_CURRENT_LIST_DIR}/DefaultCXX.cmake")
set(DEFAULT_Fortran_PROPS "${CMAKE_CURRENT_LIST_DIR}/DefaultFortran.cmake")
-563
View File
@@ -1,563 +0,0 @@
cmake_minimum_required(VERSION 3.16.0 FATAL_ERROR)
set(CMAKE_SYSTEM_VERSION 10.0.22621.0 CACHE STRING "" FORCE)
project(lifter CXX)
################################################################################
# Set target arch type if empty. Visual studio solution generator provides it.
################################################################################
if(NOT CMAKE_VS_PLATFORM_NAME)
set(CMAKE_VS_PLATFORM_NAME "x64")
endif()
message("${CMAKE_VS_PLATFORM_NAME} architecture in use")
if(NOT ("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64"))
message(FATAL_ERROR "${CMAKE_VS_PLATFORM_NAME} arch is not supported!")
endif()
################################################################################
# Global configuration types
################################################################################
set(CMAKE_CONFIGURATION_TYPES
"Debug"
"Release"
CACHE STRING "" FORCE
)
################################################################################
# Global compiler options
################################################################################
if(MSVC)
# remove default flags provided with CMake for MSVC
set(CMAKE_CXX_FLAGS "")
set(CMAKE_CXX_FLAGS_DEBUG "")
set(CMAKE_CXX_FLAGS_RELEASE "")
endif()
################################################################################
# Global linker options
################################################################################
if(MSVC)
# remove default flags provided with CMake for MSVC
set(CMAKE_EXE_LINKER_FLAGS "")
set(CMAKE_MODULE_LINKER_FLAGS "")
set(CMAKE_SHARED_LINKER_FLAGS "")
set(CMAKE_STATIC_LINKER_FLAGS "")
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS}")
set(CMAKE_STATIC_LINKER_FLAGS_DEBUG "${CMAKE_STATIC_LINKER_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS}")
set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS}")
endif()
################################################################################
# Nuget packages function stub.
################################################################################
function(use_package TARGET PACKAGE VERSION)
message(WARNING "No implementation of use_package. Create yours. "
"Package \"${PACKAGE}\" with version \"${VERSION}\" "
"for target \"${TARGET}\" is ignored!")
endfunction()
################################################################################
# Common utils
################################################################################
include(CMake/Utils.cmake)
################################################################################
# Additional Global Settings(add specific info there)
################################################################################
include(CMake/GlobalSettingsInclude.cmake OPTIONAL)
################################################################################
# Use solution folders feature
################################################################################
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
################################################################################
# Sub-projects
################################################################################
set(PROJECT_NAME lifter)
################################################################################
# Source groups
################################################################################
set(Header_Files
"CustomPasses.h"
"includes.h"
"LLVM-init.h"
"nacibaba_opts.h"
"OperandUtils.h"
"ROPdetection.h"
"Semantics.h"
"utils.h"
)
source_group("Header Files" FILES ${Header_Files})
set(Source_Files
"CustomPasses.cpp"
"lifter.cpp"
"LLVM-init.cpp"
"nacibaba_opts.cpp"
"OperandUtils.cpp"
"ROPdetection.cpp"
"Semantics.cpp"
"utils.cpp"
)
source_group("Source Files" FILES ${Source_Files})
set(ALL_FILES
${Header_Files}
${Source_Files}
)
################################################################################
# Target
################################################################################
add_executable(${PROJECT_NAME} ${ALL_FILES})
# Set C++ standard to C++20
set_target_properties(${PROJECT_NAME} PROPERTIES
CXX_STANDARD 20
CXX_STANDARD_REQUIRED YES
CXX_EXTENSIONS OFF
)
use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}")
set_target_properties(${PROJECT_NAME} PROPERTIES
VS_GLOBAL_KEYWORD "Win32Proj"
)
################################################################################
# Target name
################################################################################
set_target_properties(${PROJECT_NAME} PROPERTIES
TARGET_NAME_DEBUG "lifter"
TARGET_NAME_RELEASE "lifter"
)
################################################################################
# Output directory
################################################################################
set_target_properties(${PROJECT_NAME} PROPERTIES
OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/x64/Debug/"
OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/x64/Release/"
)
set_target_properties(${PROJECT_NAME} PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY_DEBUG "C:/Users/yusuf/Desktop/Z2LLVM/lifter/x64/Debug"
ARCHIVE_OUTPUT_DIRECTORY_RELEASE "C:/Users/yusuf/Desktop/Z2LLVM/lifter/x64/Release"
)
set_target_properties(${PROJECT_NAME} PROPERTIES
ARCHIVE_OUTPUT_NAME_DEBUG "lifter"
ARCHIVE_OUTPUT_NAME_RELEASE "lifter"
)
set_target_properties(${PROJECT_NAME} PROPERTIES
INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE"
)
################################################################################
# MSVC runtime library
################################################################################
get_property(MSVC_RUNTIME_LIBRARY_DEFAULT TARGET ${PROJECT_NAME} PROPERTY MSVC_RUNTIME_LIBRARY)
string(CONCAT "MSVC_RUNTIME_LIBRARY_STR"
$<$<CONFIG:Debug>:
MultiThreadedDebugDLL
>
$<$<CONFIG:Release>:
MultiThreadedDLL
>
$<$<NOT:$<OR:$<CONFIG:Debug>,$<CONFIG:Release>>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}>
)
set_target_properties(${PROJECT_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY ${MSVC_RUNTIME_LIBRARY_STR})
################################################################################
# Include directories
################################################################################
target_include_directories(${PROJECT_NAME} PUBLIC
"$<$<CONFIG:Debug>:"
"${CMAKE_CURRENT_SOURCE_DIR}/../../zydis-4.0.0/include;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../zydis-4.0.0/dependencies/zycore/include;"
"${CMAKE_CURRENT_SOURCE_DIR}/."
">"
"$<$<CONFIG:Release>:"
"${CMAKE_CURRENT_SOURCE_DIR}/../../zydis/include;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../zydis/dependencies/zycore/include"
">"
"${CMAKE_CURRENT_SOURCE_DIR}/../../llvm-project/llvm/include;"
"${CMAKE_CURRENT_SOURCE_DIR}/../../llvm-project/llvm/build/include"
)
################################################################################
# Compile definitions
################################################################################
target_compile_definitions(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:"
"_DEBUG;"
"UNICODE;"
"_UNICODE;"
"CMAKE_INTDIR=\"Debug\";"
"UNICODE;"
"_UNICODE"
">"
"$<$<CONFIG:Release>:"
"NDEBUG;"
"_MBCS;"
"CMAKE_INTDIR=\"Release\";"
"_MBCS"
">"
"_CONSOLE"
)
################################################################################
# Compile and link options
################################################################################
if(MSVC)
target_compile_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Release>:
/MP;
/O2;
/Ob2;
/GF;
/GT;
/Oy;
/Gy;
/Ot;
/fp:fast;
/Oi-
>
/permissive-;
/sdl;
/arch:AVX2;
/W3;
/Zi;
${DEFAULT_CXX_EXCEPTION_HANDLING};
/Y-
)
target_link_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Debug>:
/INCREMENTAL
>
$<$<CONFIG:Release>:
/OPT:REF;
/OPT:ICF;
/PROFILE
>
/MANIFEST;
/DEBUG;
/SUBSYSTEM:CONSOLE
)
endif()
################################################################################
# Dependencies
################################################################################
set(ADDITIONAL_LIBRARY_DEPENDENCIES
"$<$<CONFIG:Debug>:"
"../../zydis-4.0.0/build/Debug/Zydis;"
"../../zydis-4.0.0/build/zycore/Debug/Zycore;"
"../../llvm-project/llvm/build/Debug/lib/LLVMCore;"
"../../llvm-project/llvm/build/Debug/lib/LLVMExecutionEngine;"
"../../llvm-project/llvm/build/Debug/lib/LLVMMC;"
"../../llvm-project/llvm/build/Debug/lib/LLVMMCJIT;"
"../../llvm-project/llvm/build/Debug/lib/LLVMSupport;"
"../../llvm-project/llvm/build/Debug/lib/LLVMX86CodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMX86Desc;"
"../../llvm-project/llvm/build/Debug/lib/LLVMX86Info;"
"../../llvm-project/llvm/build/Debug/lib/LLVMOrcTargetProcess;"
"../../llvm-project/llvm/build/Debug/lib/LLVMOrcShared;"
"../../llvm-project/llvm/build/Debug/lib/LLVMRuntimeDyld;"
"../../llvm-project/llvm/build/Debug/lib/LLVMMCDisassembler;"
"../../llvm-project/llvm/build/Debug/lib/LLVMAsmPrinter;"
"../../llvm-project/llvm/build/Debug/lib/LLVMCFGuard;"
"../../llvm-project/llvm/build/Debug/lib/LLVMGlobalISel;"
"../../llvm-project/llvm/build/Debug/lib/LLVMInstrumentation;"
"../../llvm-project/llvm/build/Debug/lib/LLVMSelectionDAG;"
"../../llvm-project/llvm/build/Debug/lib/LLVMCodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMTarget;"
"../../llvm-project/llvm/build/Debug/lib/LLVMBitWriter;"
"../../llvm-project/llvm/build/Debug/lib/LLVMObjCARCOpts;"
"../../llvm-project/llvm/build/Debug/lib/LLVMScalarOpts;"
"../../llvm-project/llvm/build/Debug/lib/LLVMAggressiveInstCombine;"
"../../llvm-project/llvm/build/Debug/lib/LLVMInstCombine;"
"../../llvm-project/llvm/build/Debug/lib/LLVMCodeGenTypes;"
"../../llvm-project/llvm/build/Debug/lib/LLVMTransformUtils;"
"../../llvm-project/llvm/build/Debug/lib/LLVMAnalysis;"
"../../llvm-project/llvm/build/Debug/lib/LLVMProfileData;"
"../../llvm-project/llvm/build/Debug/lib/LLVMSymbolize;"
"../../llvm-project/llvm/build/Debug/lib/LLVMDebugInfoDWARF;"
"../../llvm-project/llvm/build/Debug/lib/LLVMDebugInfoPDB;"
"../../llvm-project/llvm/build/Debug/lib/LLVMObject;"
"../../llvm-project/llvm/build/Debug/lib/LLVMIRReader;"
"../../llvm-project/llvm/build/Debug/lib/LLVMBitReader;"
"../../llvm-project/llvm/build/Debug/lib/LLVMAsmParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMRemarks;"
"../../llvm-project/llvm/build/Debug/lib/LLVMBitstreamReader;"
"../../llvm-project/llvm/build/Debug/lib/LLVMMCParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMTextAPI;"
"../../llvm-project/llvm/build/Debug/lib/LLVMBinaryFormat;"
"../../llvm-project/llvm/build/Debug/lib/LLVMTargetParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMDebugInfoCodeView;"
"../../llvm-project/llvm/build/Debug/lib/LLVMDebugInfoMSF;"
"../../llvm-project/llvm/build/Debug/lib/LLVMDebugInfoBTF;"
"../../llvm-project/llvm/build/Debug/lib/LLVMDemangle;"
"../../llvm-project/llvm/build/Debug/lib/LLVMPasses;"
"../../llvm-project/llvm/build/Debug/lib/LLVMAArch64AsmParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMAMDGPUAsmParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMARMAsmParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMAVRAsmParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMBPFAsmParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMHexagonAsmParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMLanaiAsmParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMLoongArchAsmParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMMipsAsmParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMMSP430AsmParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMPowerPCAsmParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMRISCVAsmParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMSparcAsmParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMSystemZAsmParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMVEAsmParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMWebAssemblyAsmParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMX86AsmParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMAArch64CodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMAMDGPUCodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMARMCodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMAVRCodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMBPFCodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMHexagonCodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMLanaiCodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMLoongArchCodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMMipsCodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMMSP430CodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMNVPTXCodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMPowerPCCodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMRISCVCodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMSparcCodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMSystemZCodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMVECodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMWebAssemblyCodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMXCoreCodeGen;"
"../../llvm-project/llvm/build/Debug/lib/LLVMAArch64Desc;"
"../../llvm-project/llvm/build/Debug/lib/LLVMAMDGPUDesc;"
"../../llvm-project/llvm/build/Debug/lib/LLVMARMDesc;"
"../../llvm-project/llvm/build/Debug/lib/LLVMAVRDesc;"
"../../llvm-project/llvm/build/Debug/lib/LLVMBPFDesc;"
"../../llvm-project/llvm/build/Debug/lib/LLVMHexagonDesc;"
"../../llvm-project/llvm/build/Debug/lib/LLVMLanaiDesc;"
"../../llvm-project/llvm/build/Debug/lib/LLVMLoongArchDesc;"
"../../llvm-project/llvm/build/Debug/lib/LLVMMipsDesc;"
"../../llvm-project/llvm/build/Debug/lib/LLVMMSP430Desc;"
"../../llvm-project/llvm/build/Debug/lib/LLVMNVPTXDesc;"
"../../llvm-project/llvm/build/Debug/lib/LLVMPowerPCDesc;"
"../../llvm-project/llvm/build/Debug/lib/LLVMRISCVDesc;"
"../../llvm-project/llvm/build/Debug/lib/LLVMSparcDesc;"
"../../llvm-project/llvm/build/Debug/lib/LLVMSystemZDesc;"
"../../llvm-project/llvm/build/Debug/lib/LLVMVEDesc;"
"../../llvm-project/llvm/build/Debug/lib/LLVMWebAssemblyDesc;"
"../../llvm-project/llvm/build/Debug/lib/LLVMXCoreDesc;"
"../../llvm-project/llvm/build/Debug/lib/LLVMAArch64Info;"
"../../llvm-project/llvm/build/Debug/lib/LLVMAMDGPUInfo;"
"../../llvm-project/llvm/build/Debug/lib/LLVMARMInfo;"
"../../llvm-project/llvm/build/Debug/lib/LLVMAVRInfo;"
"../../llvm-project/llvm/build/Debug/lib/LLVMBPFInfo;"
"../../llvm-project/llvm/build/Debug/lib/LLVMHexagonInfo;"
"../../llvm-project/llvm/build/Debug/lib/LLVMLanaiInfo;"
"../../llvm-project/llvm/build/Debug/lib/LLVMLoongArchInfo;"
"../../llvm-project/llvm/build/Debug/lib/LLVMMipsInfo;"
"../../llvm-project/llvm/build/Debug/lib/LLVMMSP430Info;"
"../../llvm-project/llvm/build/Debug/lib/LLVMNVPTXInfo;"
"../../llvm-project/llvm/build/Debug/lib/LLVMPowerPCInfo;"
"../../llvm-project/llvm/build/Debug/lib/LLVMRISCVInfo;"
"../../llvm-project/llvm/build/Debug/lib/LLVMSparcInfo;"
"../../llvm-project/llvm/build/Debug/lib/LLVMSystemZInfo;"
"../../llvm-project/llvm/build/Debug/lib/LLVMVEInfo;"
"../../llvm-project/llvm/build/Debug/lib/LLVMWebAssemblyInfo;"
"../../llvm-project/llvm/build/Debug/lib/LLVMXCoreInfo;"
"../../llvm-project/llvm/build/Debug/lib/LLVMCoroutines;"
"../../llvm-project/llvm/build/Debug/lib/LLVMExtensions;"
"../../llvm-project/llvm/build/Debug/lib/LLVMipo;"
"../../llvm-project/llvm/build/Debug/lib/LLVMIRPrinter;"
"../../llvm-project/llvm/build/Debug/lib/LLVMVectorize;"
"../../llvm-project/llvm/build/Debug/lib/LLVMAArch64Utils;"
"../../llvm-project/llvm/build/Debug/lib/LLVMAMDGPUUtils;"
"../../llvm-project/llvm/build/Debug/lib/LLVMMIRParser;"
"../../llvm-project/llvm/build/Debug/lib/LLVMARMUtils;"
"../../llvm-project/llvm/build/Debug/lib/LLVMFrontendOpenMP;"
"../../llvm-project/llvm/build/Debug/lib/LLVMLinker;"
"../../llvm-project/llvm/build/Debug/lib/LLVMWebAssemblyUtils"
">"
"$<$<CONFIG:Release>:"
"../../zydis/ReleaseX64/Zydis;"
"../../zydis/ReleaseX64/Zycore;"
"../../llvm-project/llvm/build/Release/lib/LLVMAArch64AsmParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMAMDGPUAsmParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMARMAsmParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMAVRAsmParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMBPFAsmParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMHexagonAsmParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMLanaiAsmParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMLoongArchAsmParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMMipsAsmParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMMSP430AsmParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMPowerPCAsmParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMRISCVAsmParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMSparcAsmParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMSystemZAsmParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMVEAsmParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMWebAssemblyAsmParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMX86AsmParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMAArch64CodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMAMDGPUCodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMARMCodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMAVRCodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMBPFCodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMHexagonCodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMLanaiCodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMLoongArchCodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMMipsCodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMMSP430CodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMNVPTXCodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMPowerPCCodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMRISCVCodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMSparcCodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMSystemZCodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMVECodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMWebAssemblyCodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMX86CodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMXCoreCodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMAArch64Desc;"
"../../llvm-project/llvm/build/Release/lib/LLVMAMDGPUDesc;"
"../../llvm-project/llvm/build/Release/lib/LLVMARMDesc;"
"../../llvm-project/llvm/build/Release/lib/LLVMAVRDesc;"
"../../llvm-project/llvm/build/Release/lib/LLVMBPFDesc;"
"../../llvm-project/llvm/build/Release/lib/LLVMHexagonDesc;"
"../../llvm-project/llvm/build/Release/lib/LLVMLanaiDesc;"
"../../llvm-project/llvm/build/Release/lib/LLVMLoongArchDesc;"
"../../llvm-project/llvm/build/Release/lib/LLVMMipsDesc;"
"../../llvm-project/llvm/build/Release/lib/LLVMMSP430Desc;"
"../../llvm-project/llvm/build/Release/lib/LLVMNVPTXDesc;"
"../../llvm-project/llvm/build/Release/lib/LLVMPowerPCDesc;"
"../../llvm-project/llvm/build/Release/lib/LLVMRISCVDesc;"
"../../llvm-project/llvm/build/Release/lib/LLVMSparcDesc;"
"../../llvm-project/llvm/build/Release/lib/LLVMSystemZDesc;"
"../../llvm-project/llvm/build/Release/lib/LLVMVEDesc;"
"../../llvm-project/llvm/build/Release/lib/LLVMWebAssemblyDesc;"
"../../llvm-project/llvm/build/Release/lib/LLVMX86Desc;"
"../../llvm-project/llvm/build/Release/lib/LLVMXCoreDesc;"
"../../llvm-project/llvm/build/Release/lib/LLVMAArch64Info;"
"../../llvm-project/llvm/build/Release/lib/LLVMAMDGPUInfo;"
"../../llvm-project/llvm/build/Release/lib/LLVMARMInfo;"
"../../llvm-project/llvm/build/Release/lib/LLVMAVRInfo;"
"../../llvm-project/llvm/build/Release/lib/LLVMBPFInfo;"
"../../llvm-project/llvm/build/Release/lib/LLVMHexagonInfo;"
"../../llvm-project/llvm/build/Release/lib/LLVMLanaiInfo;"
"../../llvm-project/llvm/build/Release/lib/LLVMLoongArchInfo;"
"../../llvm-project/llvm/build/Release/lib/LLVMMipsInfo;"
"../../llvm-project/llvm/build/Release/lib/LLVMMSP430Info;"
"../../llvm-project/llvm/build/Release/lib/LLVMNVPTXInfo;"
"../../llvm-project/llvm/build/Release/lib/LLVMPowerPCInfo;"
"../../llvm-project/llvm/build/Release/lib/LLVMRISCVInfo;"
"../../llvm-project/llvm/build/Release/lib/LLVMSparcInfo;"
"../../llvm-project/llvm/build/Release/lib/LLVMSystemZInfo;"
"../../llvm-project/llvm/build/Release/lib/LLVMVEInfo;"
"../../llvm-project/llvm/build/Release/lib/LLVMWebAssemblyInfo;"
"../../llvm-project/llvm/build/Release/lib/LLVMX86Info;"
"../../llvm-project/llvm/build/Release/lib/LLVMXCoreInfo;"
"../../llvm-project/llvm/build/Release/lib/LLVMAggressiveInstCombine;"
"../../llvm-project/llvm/build/Release/lib/LLVMAnalysis;"
"../../llvm-project/llvm/build/Release/lib/LLVMAsmParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMBitWriter;"
"../../llvm-project/llvm/build/Release/lib/LLVMCFGuard;"
"../../llvm-project/llvm/build/Release/lib/LLVMCodeGen;"
"../../llvm-project/llvm/build/Release/lib/LLVMCore;"
"../../llvm-project/llvm/build/Release/lib/LLVMCoroutines;"
"../../llvm-project/llvm/build/Release/lib/LLVMExtensions;"
"../../llvm-project/llvm/build/Release/lib/LLVMipo;"
"../../llvm-project/llvm/build/Release/lib/LLVMIRReader;"
"../../llvm-project/llvm/build/Release/lib/LLVMIRPrinter;"
"../../llvm-project/llvm/build/Release/lib/LLVMInstCombine;"
"../../llvm-project/llvm/build/Release/lib/LLVMInstrumentation;"
"../../llvm-project/llvm/build/Release/lib/LLVMMC;"
"../../llvm-project/llvm/build/Release/lib/LLVMObjCARCOpts;"
"../../llvm-project/llvm/build/Release/lib/LLVMRemarks;"
"../../llvm-project/llvm/build/Release/lib/LLVMScalarOpts;"
"../../llvm-project/llvm/build/Release/lib/LLVMSupport;"
"../../llvm-project/llvm/build/Release/lib/LLVMTarget;"
"../../llvm-project/llvm/build/Release/lib/LLVMTargetParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMTransformUtils;"
"../../llvm-project/llvm/build/Release/lib/LLVMVectorize;"
"../../llvm-project/llvm/build/Release/lib/LLVMPasses;"
"../../llvm-project/llvm/build/Release/lib/LLVMAArch64Utils;"
"../../llvm-project/llvm/build/Release/lib/LLVMAMDGPUUtils;"
"../../llvm-project/llvm/build/Release/lib/LLVMHipStdPar;"
"../../llvm-project/llvm/build/Release/lib/LLVMMIRParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMARMUtils;"
"../../llvm-project/llvm/build/Release/lib/LLVMFrontendOpenMP;"
"../../llvm-project/llvm/build/Release/lib/LLVMFrontendOffloading;"
"../../llvm-project/llvm/build/Release/lib/LLVMLinker;"
"../../llvm-project/llvm/build/Release/lib/LLVMWebAssemblyUtils;"
"../../llvm-project/llvm/build/Release/lib/LLVMMCDisassembler;"
"../../llvm-project/llvm/build/Release/lib/LLVMGlobalISel;"
"../../llvm-project/llvm/build/Release/lib/LLVMAsmPrinter;"
"../../llvm-project/llvm/build/Release/lib/LLVMSelectionDAG;"
"../../llvm-project/llvm/build/Release/lib/LLVMProfileData;"
"../../llvm-project/llvm/build/Release/lib/LLVMSymbolize;"
"../../llvm-project/llvm/build/Release/lib/LLVMDebugInfoDWARF;"
"../../llvm-project/llvm/build/Release/lib/LLVMDebugInfoPDB;"
"../../llvm-project/llvm/build/Release/lib/LLVMDebugInfoMSF;"
"../../llvm-project/llvm/build/Release/lib/LLVMDebugInfoBTF;"
"../../llvm-project/llvm/build/Release/lib/LLVMObject;"
"../../llvm-project/llvm/build/Release/lib/LLVMMCParser;"
"../../llvm-project/llvm/build/Release/lib/LLVMDebugInfoCodeView;"
"../../llvm-project/llvm/build/Release/lib/LLVMBitReader;"
"../../llvm-project/llvm/build/Release/lib/LLVMTextAPI;"
"../../llvm-project/llvm/build/Release/lib/LLVMBitstreamReader;"
"../../llvm-project/llvm/build/Release/lib/LLVMBinaryFormat;"
"../../llvm-project/llvm/build/Release/lib/LLVMCodeGenTypes;"
"../../llvm-project/llvm/build/Release/lib/LLVMDemangle;"
"ws2_32"
">"
"psapi;"
"shell32;"
"ole32;"
"uuid;"
"advapi32;"
"delayimp;"
"-delayload:shell32.dll;"
"-delayload:ole32.dll;"
"kernel32;"
"user32;"
"gdi32;"
"winspool;"
"oleaut32;"
"comdlg32"
)
target_link_libraries(${PROJECT_NAME} PRIVATE "${ADDITIONAL_LIBRARY_DEPENDENCIES}")
+11 -15
View File
@@ -49,7 +49,7 @@ IntegerType* getIntSize(int size, LLVMContext& context) {
}
void Init_Flags(LLVMContext& context, IRBuilder<>& builder) {
void Init_Flags2(LLVMContext& context, IRBuilder<>& builder) {
auto zero = (ConstantInt*)llvm::ConstantInt::getSigned(llvm::Type::getInt1Ty(context), 0);
@@ -80,7 +80,7 @@ Value* getFlag(LLVMContext& context, IRBuilder<>& builder, Flag flag) {
// instead of 1 variable
// have multiple variables that correspond to the flags
void Init_Flags2(LLVMContext& context, IRBuilder<>& builder) {
void Init_Flags(LLVMContext& context, IRBuilder<>& builder) {
auto zero = (ConstantInt*)llvm::ConstantInt::getSigned(llvm::Type::getInt64Ty(context), 0);
@@ -177,18 +177,17 @@ Value* GetValueFromHighByteRegister(LLVMContext& context, IRBuilder<>& builder,
return highByteValue;
}
// this function will probably cause issues in the future
void SetRFLAGSValue(LLVMContext& context, IRBuilder<>& builder, Value* value) {
for (int flag = FLAG_CF; flag++; flag < FLAGS_END) {
int shiftAmount = flag;
Value* shiftedFlagValue = builder.CreateLShr(value, ConstantInt::get(Type::getInt64Ty(context), shiftAmount) ); // Value >> flag
Value* shiftedFlagValue = builder.CreateLShr(value, ConstantInt::get(Type::getInt64Ty(context), shiftAmount)); // Value >> flag
auto flagValue = builder.CreateTrunc(shiftedFlagValue, Type::getInt1Ty(context)); // i64 ...0001 to 1
setFlag(context,builder,(Flag)flag,flagValue);
setFlag(context, builder, (Flag)flag, flagValue);
// shl and or flags to have one big flag
}
return ;
return;
}
Value* GetRFLAGSValue(LLVMContext& context, IRBuilder<>& builder) {
@@ -196,7 +195,7 @@ Value* GetRFLAGSValue(LLVMContext& context, IRBuilder<>& builder) {
for (int flag = FLAG_CF; flag++; flag < FLAGS_END) {
Value* flagValue = getFlag(context, builder, (Flag)flag);
int shiftAmount = flag;
int shiftAmount = flag;
Value* shiftedFlagValue = builder.CreateShl(flagValue, ConstantInt::get(Type::getInt64Ty(context), shiftAmount));
rflags = builder.CreateOr(rflags, shiftedFlagValue);
}
@@ -225,6 +224,7 @@ Value* GetRegisterValue(LLVMContext& context, IRBuilder<>& builder, int key) {
}
*/
return RegisterList[newKey];
}
@@ -318,7 +318,6 @@ void SetRegisterValue(LLVMContext& context, IRBuilder<>& builder, int key, Value
value = SetValueToSubRegister2(context, builder, key, value);
}
if (key == ZYDIS_REGISTER_RFLAGS) {
SetRFLAGSValue(context, builder, value);
return;
@@ -549,14 +548,12 @@ Value* GetOperandValue(LLVMContext& context, IRBuilder<>& builder, ZydisDecodedO
APInt readValue(byteSize * 8, tempValue);
Constant* newVal = ConstantInt::get(loadType, readValue);
if (newVal)
return newVal;
}
if (addr > 0 && addr < STACKP_VALUE) {
auto newval = globalBuffer.retrieveCombinedValue(builder, addr, byteSize);
if (newval)
return newval;
}
@@ -630,12 +627,12 @@ Value* merge(LLVMContext& context, IRBuilder<>& builder, Value* existingValue, V
// responsible for setting a value in SSA Value map
Value* SetOperandValue(LLVMContext& context, IRBuilder<>& builder, ZydisDecodedOperand& op, Value* value) {
switch (op.type) {
case ZYDIS_OPERAND_TYPE_REGISTER: {
GetRegisterValue(context, builder, op.reg.value);
SetRegisterValue(context, builder, op.reg.value, value);
return value;
break;
}case ZYDIS_OPERAND_TYPE_MEMORY: {
@@ -707,9 +704,8 @@ Value* SetOperandValue(LLVMContext& context, IRBuilder<>& builder, ZydisDecodedO
break;
default: {
printf("kurwa: %d\n", op.type);
throw std::runtime_error("operand type not implemented"); exit(-1);
return nullptr;
return nullptr;
}
}
@@ -761,4 +757,4 @@ Value* setFlag2(LLVMContext& context, IRBuilder<>& builder, Flag flag, Value* ne
shifted_newValue = builder.CreateOr(cleared_rflag, shifted_newValue, "setflag-or");
SetRegisterValue(context, builder, ZYDIS_REGISTER_RFLAGS, shifted_newValue);
return shifted_newValue;
}
}
+28 -29
View File
@@ -6,6 +6,7 @@
void* file_base_g;
ZyanU8* data_g;
#pragma once
#ifndef GEPLoadPass_H
#define GEPLoadPass_H
@@ -15,13 +16,11 @@ ZyanU8* data_g;
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Constants.h"
#include "llvm/Transforms/Scalar/SROA.h"
class RemovePseudoStackPass : public llvm::PassInfoMixin<RemovePseudoStackPass> {
public:
llvm::PreservedAnalyses run(llvm::Module& M, llvm::ModuleAnalysisManager&) {
// %stackmemory = alloca i128, i128 STACKP_VALUE
// insert %stackmemory as first inst
@@ -174,23 +173,23 @@ void initDetections(void* file_base, ZyanU8* data) {
// detects if RSP matches the starting value of RSP
// normal function:
//
//
// -- rsp = 0xffff
// push ecx 0xfff8
// ...etc...
// pop ecx 0xffff
// (before ret rsp = 0xffff)
// ret
//
// ret
//
// fake ret/function
//
//
// -- rsp = 0xffff
// push ecx 0xfff8
// ...etc...
// pop ecx 0xffff
// push (next_handler) 0xfff8
// (before ret rsp = 0xfff8)
// ret
// (before ret rsp = 0xfff8)
// ret
//
// basically apply bunch of optimizations and compare RSP
@@ -203,7 +202,7 @@ bool doesReturnRsp(Function* clonedFunc, BasicBlock& clonedBB, void* file_base,
if (llvm::ConstantInt* constInt = dyn_cast<llvm::ConstantInt>(clonedBB.getTerminator()->getOperand(0))) {
return constInt->getZExtValue() == 18446744073709551600ull;
return constInt->getZExtValue() == 18446744073709551600;
}
}
@@ -259,11 +258,11 @@ bool doesReturnRsp(Function* clonedFunc, BasicBlock& clonedBB, void* file_base,
if (llvm::ConstantInt* constInt = dyn_cast<llvm::ConstantInt>(clonedBB.getTerminator()->getOperand(0))) {
return constInt->getZExtValue() == 18446744073709551600ull;
return constInt->getZExtValue() == 18446744073709551600;
}
}
// after analysis
@@ -314,7 +313,7 @@ void test_optxd(Function* clonedFuncx) {
modulePassManager.addPass(ReplaceTruncWithLoadPass());
modulePassManager.run(*module, moduleAnalysisManager);
size_t afterSize = module->getInstructionCount();
// Check if the module has changed
@@ -421,7 +420,7 @@ opaque_info isOpaque(Function* function) {
llvm::PassBuilder passBuilder;
#ifdef _DEVELOPMENT
std::string Filename2 = "output_opaque_noopt.ll";
std::string Filename = "output_opaque_noopt.ll";
std::error_code EC;
llvm::raw_fd_ostream OS(Filename, EC);
clonedFunc->print(OS);
@@ -457,19 +456,19 @@ opaque_info isOpaque(Function* function) {
do {
changed = false;
size_t beforeSize = module->getInstructionCount();
// Build and run the optimization pipeline
modulePassManager = passBuilder.buildPerModuleDefaultPipeline(OptimizationLevel::O0);
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass()));
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass(SROAOptions::PreserveCFG)));
modulePassManager.addPass(createModuleToFunctionPassAdaptor(EarlyCSEPass(true)));
modulePassManager.addPass(IPSCCPPass());
modulePassManager.addPass(createModuleToFunctionPassAdaptor(InstCombinePass()));
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass()));
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass(SROAOptions::PreserveCFG)));
modulePassManager.addPass(createModuleToFunctionPassAdaptor(EarlyCSEPass(true)));
modulePassManager.addPass(createModuleToFunctionPassAdaptor(InstCombinePass()));
@@ -494,7 +493,7 @@ opaque_info isOpaque(Function* function) {
clonedFunc->print(OS2);
#endif
size_t afterSize = module->getInstructionCount();
// Check if the module has changed
@@ -505,7 +504,7 @@ opaque_info isOpaque(Function* function) {
} while (changed);
returnInst = dyn_cast<llvm::ReturnInst>(clonedFunc->back().getTerminator());
// Assuming you want to check the return value of the ReturnInst
if (returnInst->getReturnValue() != nullptr) {
@@ -530,7 +529,7 @@ opaque_info isOpaque(Function* function) {
ROP_info isROP(Function* clonedFunc, BasicBlock& clonedBB, uintptr_t &dest) {
//create clone of module/function then analyze it.
auto file_base = file_base_g;
auto data = data_g;
@@ -595,18 +594,18 @@ ROP_info isROP(Function* clonedFunc, BasicBlock& clonedBB, uintptr_t &dest) {
bool haschanged = false;
changed = false;
size_t beforeSize = module->getInstructionCount();
// Build and run the optimization pipeline
modulePassManager = passBuilder.buildPerModuleDefaultPipeline(OptimizationLevel::O0);
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass()));
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass(SROAOptions::PreserveCFG)));
modulePassManager.addPass(createModuleToFunctionPassAdaptor(EarlyCSEPass(true)));
modulePassManager.addPass(IPSCCPPass());
modulePassManager.addPass(createModuleToFunctionPassAdaptor(InstCombinePass()));
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass()));
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass(SROAOptions::PreserveCFG)));
modulePassManager.addPass(createModuleToFunctionPassAdaptor(EarlyCSEPass(true)));
modulePassManager.addPass(createModuleToFunctionPassAdaptor(InstCombinePass()));
@@ -631,7 +630,7 @@ ROP_info isROP(Function* clonedFunc, BasicBlock& clonedBB, uintptr_t &dest) {
clonedFunc->print(OS2);
#endif
std::string afterOptimization;
size_t afterSize = module->getInstructionCount();
@@ -666,7 +665,7 @@ ROP_info isROP(Function* clonedFunc, BasicBlock& clonedBB, uintptr_t &dest) {
llvm::Value* returnValue = returnInst->getReturnValue();
if (llvm::ConstantInt* constInt = llvm::dyn_cast<llvm::ConstantInt>(returnValue)) {
dest = constInt->getZExtValue();
}
}
@@ -697,7 +696,7 @@ JMP_info isJOP(Function* function, uintptr_t& dest) {
JMP_info result = REAL_jmp;
llvm::ReturnInst* returnInst = dyn_cast<llvm::ReturnInst>(function->back().getTerminator());
if ((returnInst = dyn_cast<llvm::ReturnInst>(function->back().getTerminator()))) {
if (returnInst = dyn_cast<llvm::ReturnInst>(function->back().getTerminator())) {
// Assuming you want to check the return value of the ReturnInst
if (returnInst->getReturnValue() != nullptr) {
// Check if the return value is a constant integer
@@ -758,12 +757,12 @@ JMP_info isJOP(Function* function, uintptr_t& dest) {
// Build and run the optimization pipeline
modulePassManager = passBuilder.buildPerModuleDefaultPipeline(OptimizationLevel::O0);
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass()));
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass(SROAOptions::PreserveCFG)));
modulePassManager.addPass(createModuleToFunctionPassAdaptor(EarlyCSEPass(true)));
modulePassManager.addPass(IPSCCPPass());
modulePassManager.addPass(createModuleToFunctionPassAdaptor(InstCombinePass()));
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass()));
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass(SROAOptions::PreserveCFG)));
modulePassManager.addPass(createModuleToFunctionPassAdaptor(EarlyCSEPass(true)));
modulePassManager.addPass(createModuleToFunctionPassAdaptor(InstCombinePass()));
@@ -796,7 +795,7 @@ JMP_info isJOP(Function* function, uintptr_t& dest) {
//we need to modify here when adding branches
//maybe we add metadata to return instruction and search it?
if ((returnInst = dyn_cast<llvm::ReturnInst>(clonedFunc->back().getTerminator()))) {
if (returnInst = dyn_cast<llvm::ReturnInst>(clonedFunc->back().getTerminator() )) {
// Assuming you want to check the return value of the ReturnInst
if (returnInst->getReturnValue() != nullptr) {
// Check if the return value is a constant integer
+1 -1
View File
@@ -6,7 +6,6 @@ void test_optxd(Function* clonedFuncx);
void final_optpass(Function* clonedFuncx);
opaque_info isOpaque(Function* function);
void initDetections(void* file_base, ZyanU8* data);
@@ -14,3 +13,4 @@ void initDetections(void* file_base, ZyanU8* data);
ROP_info isROP(Function* function, BasicBlock& clonedBB, uintptr_t& dest);
JMP_info isJOP(Function* function, uintptr_t& dest);
+2 -2
View File
@@ -814,10 +814,10 @@ namespace branches {
auto Value = GetOperandValue(context, builder, dest, 64);
auto ripval = GetRegisterValue(context, builder, ZYDIS_REGISTER_RIP);
auto newRip = builder.CreateAdd(Value, ripval, "jns");
auto newRip = builder.CreateAdd(Value, ripval, "js");
branchHelper(context, builder, instruction, blockAddresses, sf, newRip, "jns", branchnumber);
branchHelper(context, builder, instruction, blockAddresses, sf, newRip, "js", branchnumber);
branchnumber++;
+2 -2
View File
@@ -5,7 +5,8 @@
#ifndef ZYDIS_STATIC_BUILD
#define ZYDIS_STATIC_BUILD
#endif // ZYDIS_STATIC_BUILD
//#define _DEVELOPMENT
#define _DEVELOPMENT
#pragma warning(disable: 4996)
#pragma warning(disable:4146)
#include <iostream>
#include <vector>
@@ -205,7 +206,6 @@
#include "llvm/Transforms/Vectorize/SLPVectorizer.h"
#include "llvm/Transforms/Vectorize/VectorCombine.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/IR/Argument.h"
+1 -6
View File
@@ -33,7 +33,6 @@
vector< tuple<uintptr_t, BasicBlock*, unordered_map<int, Value*> > > added_blocks_addresses;
uintptr_t original_address = 0;
uintptr_t instcount = 0;
// first of all, this function is UGLY af, so I'm sorry you are reading this.
void asm_to_zydis_to_lift(LLVMContext& context, IRBuilder<>& builder, ZyanU8* data, ZyanU64 runtime_address, shared_ptr<vector< tuple<uintptr_t, BasicBlock*, unordered_map<int, Value*> > > > blockAddresses, Function* function, ZyanU64 file_base) {
@@ -109,7 +108,6 @@ void asm_to_zydis_to_lift(LLVMContext& context, IRBuilder<>& builder, ZyanU8* da
// this loop is responsible of parsing asm into zydis then LLVM.
for (; run && runtime_address > 0; )
{
//the function we know and we love
ZydisDisassembleIntel(ZYDIS_MACHINE_MODE_LONG_64, runtime_address, data + offset, 15, &instruction);
@@ -121,10 +119,8 @@ void asm_to_zydis_to_lift(LLVMContext& context, IRBuilder<>& builder, ZyanU8* da
// Print current instruction.
#ifdef _DEVELOPMENT
instcount++;
cout << instruction.text << "\n";
cout << "runtime: " << runtime_address << "\n";
cout << "instcount: " << instcount << "\n";
#endif
instruction.runtime_address += instruction.info.length;
@@ -200,8 +196,7 @@ void InitFunction_and_LiftInstructions(ZyanU8* data, ZyanU64 runtime_address, ui
argTypes.push_back(llvm::Type::getInt64Ty(context)); // 16 regs
argTypes.push_back(llvm::Type::getInt64Ty(context)); // 16 regs
argTypes.push_back(llvm::Type::getInt64Ty(context)); // 16 regs
argTypes.push_back(llvm::Type::getInt8PtrTy(context)); // 1 off because rsp
//argTypes.push_back(llvm::Type::getVoidTy(context)->getPointerTo()); // 1 off because rsp
argTypes.push_back(llvm::Type::getVoidTy(context)->getPointerTo()); // 1 off because rsp
auto functionType = llvm::FunctionType::get(llvm::Type::getInt64Ty(context), argTypes, 0);
File diff suppressed because one or more lines are too long
-69
View File
@@ -1,69 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="lifter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="LLVM-init.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Semantics.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="OperandUtils.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ROPdetection.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="nacibaba_opts.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="utils.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="CustomPasses.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="includes.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="LLVM-init.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Semantics.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="OperandUtils.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="ROPdetection.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="nacibaba_opts.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="utils.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="CustomPasses.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>
-4
View File
@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>