mirror of
https://github.com/NaC-L/Mergen.git
synced 2026-05-12 09:40:34 +00:00
Fixed one crash issue, added another
This commit is contained in:
@@ -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
@@ -14,5 +14,9 @@
|
|||||||
*.iobj
|
*.iobj
|
||||||
*\x64*
|
*\x64*
|
||||||
*.exe*
|
*.exe*
|
||||||
*.sln
|
|
||||||
*vcxproj*
|
# cmkr
|
||||||
|
build*/
|
||||||
|
cmake-build*/
|
||||||
|
CMakerLists.txt
|
||||||
|
CMakeLists.txt.user
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
[submodule "linux-pe"]
|
||||||
|
path = linux-pe
|
||||||
|
url = https://github.com/can1357/linux-pe
|
||||||
Generated
+98
@@ -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()
|
||||||
Vendored
+54990
File diff suppressed because one or more lines are too long
Vendored
+12113
File diff suppressed because it is too large
Load Diff
+29
@@ -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"]
|
||||||
@@ -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}")
|
|
||||||
@@ -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()
|
|
||||||
@@ -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()
|
|
||||||
@@ -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")
|
|
||||||
Generated
-563
@@ -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
@@ -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);
|
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
|
// instead of 1 variable
|
||||||
// have multiple variables that correspond to the flags
|
// 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);
|
auto zero = (ConstantInt*)llvm::ConstantInt::getSigned(llvm::Type::getInt64Ty(context), 0);
|
||||||
@@ -177,18 +177,17 @@ Value* GetValueFromHighByteRegister(LLVMContext& context, IRBuilder<>& builder,
|
|||||||
return highByteValue;
|
return highByteValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// this function will probably cause issues in the future
|
// this function will probably cause issues in the future
|
||||||
void SetRFLAGSValue(LLVMContext& context, IRBuilder<>& builder, Value* value) {
|
void SetRFLAGSValue(LLVMContext& context, IRBuilder<>& builder, Value* value) {
|
||||||
|
|
||||||
for (int flag = FLAG_CF; flag++; flag < FLAGS_END) {
|
for (int flag = FLAG_CF; flag++; flag < FLAGS_END) {
|
||||||
int shiftAmount = flag;
|
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
|
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
|
// shl and or flags to have one big flag
|
||||||
}
|
}
|
||||||
return ;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Value* GetRFLAGSValue(LLVMContext& context, IRBuilder<>& builder) {
|
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) {
|
for (int flag = FLAG_CF; flag++; flag < FLAGS_END) {
|
||||||
Value* flagValue = getFlag(context, builder, (Flag)flag);
|
Value* flagValue = getFlag(context, builder, (Flag)flag);
|
||||||
int shiftAmount = flag;
|
int shiftAmount = flag;
|
||||||
Value* shiftedFlagValue = builder.CreateShl(flagValue, ConstantInt::get(Type::getInt64Ty(context), shiftAmount));
|
Value* shiftedFlagValue = builder.CreateShl(flagValue, ConstantInt::get(Type::getInt64Ty(context), shiftAmount));
|
||||||
rflags = builder.CreateOr(rflags, shiftedFlagValue);
|
rflags = builder.CreateOr(rflags, shiftedFlagValue);
|
||||||
}
|
}
|
||||||
@@ -225,6 +224,7 @@ Value* GetRegisterValue(LLVMContext& context, IRBuilder<>& builder, int key) {
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
return RegisterList[newKey];
|
return RegisterList[newKey];
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -318,7 +318,6 @@ void SetRegisterValue(LLVMContext& context, IRBuilder<>& builder, int key, Value
|
|||||||
value = SetValueToSubRegister2(context, builder, key, value);
|
value = SetValueToSubRegister2(context, builder, key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (key == ZYDIS_REGISTER_RFLAGS) {
|
if (key == ZYDIS_REGISTER_RFLAGS) {
|
||||||
SetRFLAGSValue(context, builder, value);
|
SetRFLAGSValue(context, builder, value);
|
||||||
return;
|
return;
|
||||||
@@ -549,14 +548,12 @@ Value* GetOperandValue(LLVMContext& context, IRBuilder<>& builder, ZydisDecodedO
|
|||||||
|
|
||||||
APInt readValue(byteSize * 8, tempValue);
|
APInt readValue(byteSize * 8, tempValue);
|
||||||
Constant* newVal = ConstantInt::get(loadType, readValue);
|
Constant* newVal = ConstantInt::get(loadType, readValue);
|
||||||
if (newVal)
|
|
||||||
return newVal;
|
return newVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addr > 0 && addr < STACKP_VALUE) {
|
if (addr > 0 && addr < STACKP_VALUE) {
|
||||||
|
|
||||||
auto newval = globalBuffer.retrieveCombinedValue(builder, addr, byteSize);
|
auto newval = globalBuffer.retrieveCombinedValue(builder, addr, byteSize);
|
||||||
if (newval)
|
|
||||||
return 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
|
// responsible for setting a value in SSA Value map
|
||||||
Value* SetOperandValue(LLVMContext& context, IRBuilder<>& builder, ZydisDecodedOperand& op, Value* value) {
|
Value* SetOperandValue(LLVMContext& context, IRBuilder<>& builder, ZydisDecodedOperand& op, Value* value) {
|
||||||
|
|
||||||
switch (op.type) {
|
switch (op.type) {
|
||||||
case ZYDIS_OPERAND_TYPE_REGISTER: {
|
case ZYDIS_OPERAND_TYPE_REGISTER: {
|
||||||
GetRegisterValue(context, builder, op.reg.value);
|
|
||||||
|
|
||||||
SetRegisterValue(context, builder, op.reg.value, value);
|
SetRegisterValue(context, builder, op.reg.value, value);
|
||||||
|
return value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}case ZYDIS_OPERAND_TYPE_MEMORY: {
|
}case ZYDIS_OPERAND_TYPE_MEMORY: {
|
||||||
@@ -707,9 +704,8 @@ Value* SetOperandValue(LLVMContext& context, IRBuilder<>& builder, ZydisDecodedO
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
printf("kurwa: %d\n", op.type);
|
|
||||||
throw std::runtime_error("operand type not implemented"); exit(-1);
|
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");
|
shifted_newValue = builder.CreateOr(cleared_rflag, shifted_newValue, "setflag-or");
|
||||||
SetRegisterValue(context, builder, ZYDIS_REGISTER_RFLAGS, shifted_newValue);
|
SetRegisterValue(context, builder, ZYDIS_REGISTER_RFLAGS, shifted_newValue);
|
||||||
return shifted_newValue;
|
return shifted_newValue;
|
||||||
}
|
}
|
||||||
+28
-29
@@ -6,6 +6,7 @@
|
|||||||
void* file_base_g;
|
void* file_base_g;
|
||||||
ZyanU8* data_g;
|
ZyanU8* data_g;
|
||||||
|
|
||||||
|
#pragma once
|
||||||
#ifndef GEPLoadPass_H
|
#ifndef GEPLoadPass_H
|
||||||
#define GEPLoadPass_H
|
#define GEPLoadPass_H
|
||||||
|
|
||||||
@@ -15,13 +16,11 @@ ZyanU8* data_g;
|
|||||||
#include "llvm/IR/Instructions.h"
|
#include "llvm/IR/Instructions.h"
|
||||||
#include "llvm/IR/Constants.h"
|
#include "llvm/IR/Constants.h"
|
||||||
|
|
||||||
#include "llvm/Transforms/Scalar/SROA.h"
|
|
||||||
|
|
||||||
|
|
||||||
class RemovePseudoStackPass : public llvm::PassInfoMixin<RemovePseudoStackPass> {
|
class RemovePseudoStackPass : public llvm::PassInfoMixin<RemovePseudoStackPass> {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
||||||
llvm::PreservedAnalyses run(llvm::Module& M, llvm::ModuleAnalysisManager&) {
|
llvm::PreservedAnalyses run(llvm::Module& M, llvm::ModuleAnalysisManager&) {
|
||||||
// %stackmemory = alloca i128, i128 STACKP_VALUE
|
// %stackmemory = alloca i128, i128 STACKP_VALUE
|
||||||
// insert %stackmemory as first inst
|
// 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
|
// detects if RSP matches the starting value of RSP
|
||||||
// normal function:
|
// normal function:
|
||||||
//
|
//
|
||||||
// -- rsp = 0xffff
|
// -- rsp = 0xffff
|
||||||
// push ecx 0xfff8
|
// push ecx 0xfff8
|
||||||
// ...etc...
|
// ...etc...
|
||||||
// pop ecx 0xffff
|
// pop ecx 0xffff
|
||||||
// (before ret rsp = 0xffff)
|
// (before ret rsp = 0xffff)
|
||||||
// ret
|
// ret
|
||||||
//
|
//
|
||||||
// fake ret/function
|
// fake ret/function
|
||||||
//
|
//
|
||||||
// -- rsp = 0xffff
|
// -- rsp = 0xffff
|
||||||
// push ecx 0xfff8
|
// push ecx 0xfff8
|
||||||
// ...etc...
|
// ...etc...
|
||||||
// pop ecx 0xffff
|
// pop ecx 0xffff
|
||||||
// push (next_handler) 0xfff8
|
// push (next_handler) 0xfff8
|
||||||
// (before ret rsp = 0xfff8)
|
// (before ret rsp = 0xfff8)
|
||||||
// ret
|
// ret
|
||||||
//
|
//
|
||||||
|
|
||||||
// basically apply bunch of optimizations and compare RSP
|
// 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))) {
|
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))) {
|
if (llvm::ConstantInt* constInt = dyn_cast<llvm::ConstantInt>(clonedBB.getTerminator()->getOperand(0))) {
|
||||||
return constInt->getZExtValue() == 18446744073709551600ull;
|
return constInt->getZExtValue() == 18446744073709551600;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// after analysis
|
// after analysis
|
||||||
@@ -314,7 +313,7 @@ void test_optxd(Function* clonedFuncx) {
|
|||||||
modulePassManager.addPass(ReplaceTruncWithLoadPass());
|
modulePassManager.addPass(ReplaceTruncWithLoadPass());
|
||||||
modulePassManager.run(*module, moduleAnalysisManager);
|
modulePassManager.run(*module, moduleAnalysisManager);
|
||||||
|
|
||||||
|
|
||||||
size_t afterSize = module->getInstructionCount();
|
size_t afterSize = module->getInstructionCount();
|
||||||
|
|
||||||
// Check if the module has changed
|
// Check if the module has changed
|
||||||
@@ -421,7 +420,7 @@ opaque_info isOpaque(Function* function) {
|
|||||||
llvm::PassBuilder passBuilder;
|
llvm::PassBuilder passBuilder;
|
||||||
|
|
||||||
#ifdef _DEVELOPMENT
|
#ifdef _DEVELOPMENT
|
||||||
std::string Filename2 = "output_opaque_noopt.ll";
|
std::string Filename = "output_opaque_noopt.ll";
|
||||||
std::error_code EC;
|
std::error_code EC;
|
||||||
llvm::raw_fd_ostream OS(Filename, EC);
|
llvm::raw_fd_ostream OS(Filename, EC);
|
||||||
clonedFunc->print(OS);
|
clonedFunc->print(OS);
|
||||||
@@ -457,19 +456,19 @@ opaque_info isOpaque(Function* function) {
|
|||||||
do {
|
do {
|
||||||
changed = false;
|
changed = false;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
size_t beforeSize = module->getInstructionCount();
|
size_t beforeSize = module->getInstructionCount();
|
||||||
|
|
||||||
// Build and run the optimization pipeline
|
// Build and run the optimization pipeline
|
||||||
|
|
||||||
modulePassManager = passBuilder.buildPerModuleDefaultPipeline(OptimizationLevel::O0);
|
modulePassManager = passBuilder.buildPerModuleDefaultPipeline(OptimizationLevel::O0);
|
||||||
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass()));
|
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass(SROAOptions::PreserveCFG)));
|
||||||
modulePassManager.addPass(createModuleToFunctionPassAdaptor(EarlyCSEPass(true)));
|
modulePassManager.addPass(createModuleToFunctionPassAdaptor(EarlyCSEPass(true)));
|
||||||
modulePassManager.addPass(IPSCCPPass());
|
modulePassManager.addPass(IPSCCPPass());
|
||||||
modulePassManager.addPass(createModuleToFunctionPassAdaptor(InstCombinePass()));
|
modulePassManager.addPass(createModuleToFunctionPassAdaptor(InstCombinePass()));
|
||||||
|
|
||||||
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass()));
|
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass(SROAOptions::PreserveCFG)));
|
||||||
modulePassManager.addPass(createModuleToFunctionPassAdaptor(EarlyCSEPass(true)));
|
modulePassManager.addPass(createModuleToFunctionPassAdaptor(EarlyCSEPass(true)));
|
||||||
modulePassManager.addPass(createModuleToFunctionPassAdaptor(InstCombinePass()));
|
modulePassManager.addPass(createModuleToFunctionPassAdaptor(InstCombinePass()));
|
||||||
|
|
||||||
@@ -494,7 +493,7 @@ opaque_info isOpaque(Function* function) {
|
|||||||
clonedFunc->print(OS2);
|
clonedFunc->print(OS2);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
size_t afterSize = module->getInstructionCount();
|
size_t afterSize = module->getInstructionCount();
|
||||||
|
|
||||||
// Check if the module has changed
|
// Check if the module has changed
|
||||||
@@ -505,7 +504,7 @@ opaque_info isOpaque(Function* function) {
|
|||||||
} while (changed);
|
} while (changed);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
returnInst = dyn_cast<llvm::ReturnInst>(clonedFunc->back().getTerminator());
|
returnInst = dyn_cast<llvm::ReturnInst>(clonedFunc->back().getTerminator());
|
||||||
// Assuming you want to check the return value of the ReturnInst
|
// Assuming you want to check the return value of the ReturnInst
|
||||||
if (returnInst->getReturnValue() != nullptr) {
|
if (returnInst->getReturnValue() != nullptr) {
|
||||||
@@ -530,7 +529,7 @@ opaque_info isOpaque(Function* function) {
|
|||||||
ROP_info isROP(Function* clonedFunc, BasicBlock& clonedBB, uintptr_t &dest) {
|
ROP_info isROP(Function* clonedFunc, BasicBlock& clonedBB, uintptr_t &dest) {
|
||||||
//create clone of module/function then analyze it.
|
//create clone of module/function then analyze it.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
auto file_base = file_base_g;
|
auto file_base = file_base_g;
|
||||||
auto data = data_g;
|
auto data = data_g;
|
||||||
@@ -595,18 +594,18 @@ ROP_info isROP(Function* clonedFunc, BasicBlock& clonedBB, uintptr_t &dest) {
|
|||||||
bool haschanged = false;
|
bool haschanged = false;
|
||||||
changed = false;
|
changed = false;
|
||||||
|
|
||||||
|
|
||||||
size_t beforeSize = module->getInstructionCount();
|
size_t beforeSize = module->getInstructionCount();
|
||||||
|
|
||||||
// Build and run the optimization pipeline
|
// Build and run the optimization pipeline
|
||||||
|
|
||||||
modulePassManager = passBuilder.buildPerModuleDefaultPipeline(OptimizationLevel::O0);
|
modulePassManager = passBuilder.buildPerModuleDefaultPipeline(OptimizationLevel::O0);
|
||||||
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass()));
|
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass(SROAOptions::PreserveCFG)));
|
||||||
modulePassManager.addPass(createModuleToFunctionPassAdaptor(EarlyCSEPass(true)));
|
modulePassManager.addPass(createModuleToFunctionPassAdaptor(EarlyCSEPass(true)));
|
||||||
modulePassManager.addPass(IPSCCPPass());
|
modulePassManager.addPass(IPSCCPPass());
|
||||||
modulePassManager.addPass(createModuleToFunctionPassAdaptor(InstCombinePass()));
|
modulePassManager.addPass(createModuleToFunctionPassAdaptor(InstCombinePass()));
|
||||||
|
|
||||||
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass()));
|
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass(SROAOptions::PreserveCFG)));
|
||||||
modulePassManager.addPass(createModuleToFunctionPassAdaptor(EarlyCSEPass(true)));
|
modulePassManager.addPass(createModuleToFunctionPassAdaptor(EarlyCSEPass(true)));
|
||||||
modulePassManager.addPass(createModuleToFunctionPassAdaptor(InstCombinePass()));
|
modulePassManager.addPass(createModuleToFunctionPassAdaptor(InstCombinePass()));
|
||||||
|
|
||||||
@@ -631,7 +630,7 @@ ROP_info isROP(Function* clonedFunc, BasicBlock& clonedBB, uintptr_t &dest) {
|
|||||||
clonedFunc->print(OS2);
|
clonedFunc->print(OS2);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
std::string afterOptimization;
|
std::string afterOptimization;
|
||||||
size_t afterSize = module->getInstructionCount();
|
size_t afterSize = module->getInstructionCount();
|
||||||
|
|
||||||
@@ -666,7 +665,7 @@ ROP_info isROP(Function* clonedFunc, BasicBlock& clonedBB, uintptr_t &dest) {
|
|||||||
llvm::Value* returnValue = returnInst->getReturnValue();
|
llvm::Value* returnValue = returnInst->getReturnValue();
|
||||||
if (llvm::ConstantInt* constInt = llvm::dyn_cast<llvm::ConstantInt>(returnValue)) {
|
if (llvm::ConstantInt* constInt = llvm::dyn_cast<llvm::ConstantInt>(returnValue)) {
|
||||||
dest = constInt->getZExtValue();
|
dest = constInt->getZExtValue();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -697,7 +696,7 @@ JMP_info isJOP(Function* function, uintptr_t& dest) {
|
|||||||
JMP_info result = REAL_jmp;
|
JMP_info result = REAL_jmp;
|
||||||
llvm::ReturnInst* returnInst = dyn_cast<llvm::ReturnInst>(function->back().getTerminator());
|
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
|
// Assuming you want to check the return value of the ReturnInst
|
||||||
if (returnInst->getReturnValue() != nullptr) {
|
if (returnInst->getReturnValue() != nullptr) {
|
||||||
// Check if the return value is a constant integer
|
// 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
|
// Build and run the optimization pipeline
|
||||||
|
|
||||||
modulePassManager = passBuilder.buildPerModuleDefaultPipeline(OptimizationLevel::O0);
|
modulePassManager = passBuilder.buildPerModuleDefaultPipeline(OptimizationLevel::O0);
|
||||||
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass()));
|
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass(SROAOptions::PreserveCFG)));
|
||||||
modulePassManager.addPass(createModuleToFunctionPassAdaptor(EarlyCSEPass(true)));
|
modulePassManager.addPass(createModuleToFunctionPassAdaptor(EarlyCSEPass(true)));
|
||||||
modulePassManager.addPass(IPSCCPPass());
|
modulePassManager.addPass(IPSCCPPass());
|
||||||
modulePassManager.addPass(createModuleToFunctionPassAdaptor(InstCombinePass()));
|
modulePassManager.addPass(createModuleToFunctionPassAdaptor(InstCombinePass()));
|
||||||
|
|
||||||
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass()));
|
modulePassManager.addPass(createModuleToFunctionPassAdaptor(SROAPass(SROAOptions::PreserveCFG)));
|
||||||
modulePassManager.addPass(createModuleToFunctionPassAdaptor(EarlyCSEPass(true)));
|
modulePassManager.addPass(createModuleToFunctionPassAdaptor(EarlyCSEPass(true)));
|
||||||
modulePassManager.addPass(createModuleToFunctionPassAdaptor(InstCombinePass()));
|
modulePassManager.addPass(createModuleToFunctionPassAdaptor(InstCombinePass()));
|
||||||
|
|
||||||
@@ -796,7 +795,7 @@ JMP_info isJOP(Function* function, uintptr_t& dest) {
|
|||||||
|
|
||||||
//we need to modify here when adding branches
|
//we need to modify here when adding branches
|
||||||
//maybe we add metadata to return instruction and search it?
|
//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
|
// Assuming you want to check the return value of the ReturnInst
|
||||||
if (returnInst->getReturnValue() != nullptr) {
|
if (returnInst->getReturnValue() != nullptr) {
|
||||||
// Check if the return value is a constant integer
|
// Check if the return value is a constant integer
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ void test_optxd(Function* clonedFuncx);
|
|||||||
|
|
||||||
void final_optpass(Function* clonedFuncx);
|
void final_optpass(Function* clonedFuncx);
|
||||||
|
|
||||||
|
|
||||||
opaque_info isOpaque(Function* function);
|
opaque_info isOpaque(Function* function);
|
||||||
|
|
||||||
void initDetections(void* file_base, ZyanU8* data);
|
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);
|
ROP_info isROP(Function* function, BasicBlock& clonedBB, uintptr_t& dest);
|
||||||
|
|
||||||
JMP_info isJOP(Function* function, uintptr_t& dest);
|
JMP_info isJOP(Function* function, uintptr_t& dest);
|
||||||
|
|
||||||
|
|||||||
@@ -814,10 +814,10 @@ namespace branches {
|
|||||||
auto Value = GetOperandValue(context, builder, dest, 64);
|
auto Value = GetOperandValue(context, builder, dest, 64);
|
||||||
auto ripval = GetRegisterValue(context, builder, ZYDIS_REGISTER_RIP);
|
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++;
|
branchnumber++;
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -5,7 +5,8 @@
|
|||||||
#ifndef ZYDIS_STATIC_BUILD
|
#ifndef ZYDIS_STATIC_BUILD
|
||||||
#define ZYDIS_STATIC_BUILD
|
#define ZYDIS_STATIC_BUILD
|
||||||
#endif // ZYDIS_STATIC_BUILD
|
#endif // ZYDIS_STATIC_BUILD
|
||||||
//#define _DEVELOPMENT
|
#define _DEVELOPMENT
|
||||||
|
#pragma warning(disable: 4996)
|
||||||
#pragma warning(disable:4146)
|
#pragma warning(disable:4146)
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@@ -205,7 +206,6 @@
|
|||||||
#include "llvm/Transforms/Vectorize/SLPVectorizer.h"
|
#include "llvm/Transforms/Vectorize/SLPVectorizer.h"
|
||||||
#include "llvm/Transforms/Vectorize/VectorCombine.h"
|
#include "llvm/Transforms/Vectorize/VectorCombine.h"
|
||||||
|
|
||||||
|
|
||||||
#include "llvm/CodeGen/Passes.h"
|
#include "llvm/CodeGen/Passes.h"
|
||||||
#include "llvm/ADT/STLExtras.h"
|
#include "llvm/ADT/STLExtras.h"
|
||||||
#include "llvm/IR/Argument.h"
|
#include "llvm/IR/Argument.h"
|
||||||
|
|||||||
+1
-6
@@ -33,7 +33,6 @@
|
|||||||
|
|
||||||
vector< tuple<uintptr_t, BasicBlock*, unordered_map<int, Value*> > > added_blocks_addresses;
|
vector< tuple<uintptr_t, BasicBlock*, unordered_map<int, Value*> > > added_blocks_addresses;
|
||||||
uintptr_t original_address = 0;
|
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.
|
// 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) {
|
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.
|
// this loop is responsible of parsing asm into zydis then LLVM.
|
||||||
for (; run && runtime_address > 0; )
|
for (; run && runtime_address > 0; )
|
||||||
{
|
{
|
||||||
|
|
||||||
//the function we know and we love
|
//the function we know and we love
|
||||||
ZydisDisassembleIntel(ZYDIS_MACHINE_MODE_LONG_64, runtime_address, data + offset, 15, &instruction);
|
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.
|
// Print current instruction.
|
||||||
|
|
||||||
#ifdef _DEVELOPMENT
|
#ifdef _DEVELOPMENT
|
||||||
instcount++;
|
|
||||||
cout << instruction.text << "\n";
|
cout << instruction.text << "\n";
|
||||||
cout << "runtime: " << runtime_address << "\n";
|
cout << "runtime: " << runtime_address << "\n";
|
||||||
cout << "instcount: " << instcount << "\n";
|
|
||||||
#endif
|
#endif
|
||||||
instruction.runtime_address += instruction.info.length;
|
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::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);
|
auto functionType = llvm::FunctionType::get(llvm::Type::getInt64Ty(context), argTypes, 0);
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -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>
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup />
|
|
||||||
</Project>
|
|
||||||
Reference in New Issue
Block a user