diff options
| author | Brandon Miller <brandon@vector35.com> | 2026-01-27 11:26:57 -0500 |
|---|---|---|
| committer | Brandon Miller <brandon@vector35.com> | 2026-01-27 11:26:57 -0500 |
| commit | 5ccef726c0954116f8f4b5d6347e0acdbb0b6ce3 (patch) | |
| tree | ef347ed0ae08bbdafb53fd5e82ffdfd104377522 /defaultarch | |
| parent | e5805fe927f42d3ac56dd283fc02b394a9739d79 (diff) | |
Perform function lifting and inlining in arch plugins
This change allows architecture plugins to override the LiftFunction
callback to iterate a function's basic block list and lift entire
functions at once. This is required for architectures such as TMS320
C6x, which have non-traditional "delay slots" in that branches, loads,
and other instructions take multiple cycles to complete, and branch
instructions can reside within the delay slots of other branches.
Diffstat (limited to 'defaultarch')
| -rw-r--r-- | defaultarch/CMakeLists.txt | 50 | ||||
| -rw-r--r-- | defaultarch/plugin.cpp | 16 |
2 files changed, 66 insertions, 0 deletions
diff --git a/defaultarch/CMakeLists.txt b/defaultarch/CMakeLists.txt new file mode 100644 index 00000000..d355f317 --- /dev/null +++ b/defaultarch/CMakeLists.txt @@ -0,0 +1,50 @@ +cmake_minimum_required(VERSION 3.13 FATAL_ERROR) + +project(defaultarch) + +if(NOT BN_INTERNAL_BUILD) + add_subdirectory(${PROJECT_SOURCE_DIR}/../.. ${PROJECT_BINARY_DIR}/api) +endif() + +file(GLOB SOURCES CONFIGURE_DEPENDS + *.cpp + *.h) + +if(DEMO) + add_library(defaultarch STATIC ${SOURCES}) +else() + add_library(defaultarch SHARED ${SOURCES}) +endif() + +target_include_directories(defaultarch + PRIVATE ${PROJECT_SOURCE_DIR} +) + +if(WIN32) + target_link_directories(defaultarch + PRIVATE ${BN_INSTALL_DIR}) + target_link_libraries(defaultarch binaryninjaapi) +else() + target_link_libraries(defaultarch binaryninjaapi) +endif() + +if(UNIX AND NOT APPLE) + target_link_options(defaultarch PRIVATE "LINKER:--exclude-libs,ALL") +endif() + +set_target_properties(defaultarch PROPERTIES + CXX_STANDARD 20 + CXX_VISIBILITY_PRESET hidden + CXX_STANDARD_REQUIRED ON + C_STANDARD 99 + C_STANDARD_REQUIRED ON + C_VISIBILITY_PRESET hidden + VISIBILITY_INLINES_HIDDEN ON + POSITION_INDEPENDENT_CODE ON) + +if(BN_INTERNAL_BUILD) + plugin_rpath(defaultarch) + set_target_properties(defaultarch PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${BN_CORE_PLUGIN_DIR} + RUNTIME_OUTPUT_DIRECTORY ${BN_CORE_PLUGIN_DIR}) +endif() diff --git a/defaultarch/plugin.cpp b/defaultarch/plugin.cpp new file mode 100644 index 00000000..3e6e66a8 --- /dev/null +++ b/defaultarch/plugin.cpp @@ -0,0 +1,16 @@ +#include "binaryninjaapi.h" +#include "binaryninjacore.h" + +using namespace BinaryNinja; + +extern "C" +{ + BN_DECLARE_CORE_ABI_VERSION + BINARYNINJAPLUGIN bool CorePluginInit() + { + if (!BNArchitectureSetDefaultAnalyzeBasicBlocksCallback((void*)Architecture::DefaultAnalyzeBasicBlocksCallback)) + return false; + + return BNArchitectureSetDefaultLiftFunctionCallback((void*)Architecture::DefaultLiftFunctionCallback); + } +} |
