summaryrefslogtreecommitdiff
path: root/defaultabb
diff options
context:
space:
mode:
authorBrandon Miller <brandon@vector35.com>2025-04-25 13:30:45 -0400
committerRyan Snyder <ryan@vector35.com>2025-06-23 13:44:12 -0400
commitb079d1a1e19151f5c39de84c2e1e6cc6a91abc74 (patch)
tree8cf27224630b690fcfdfd490ee43ec1cd56fc9b6 /defaultabb
parent76215b86ff629da58aa94d4cf4093d2e67017412 (diff)
Perform BB analysis from Architecture C++ API
This commit moves AnalyzeBasicBlocks from the binary ninja core to the API and allows architecture plugins to optionally override AnalyzeBasicBlocks for a custom implementation Supply ABB inputs in BNBasicBlockAnalysisContext Register default analyze basic blocks callback This allows the nanomips and rust core architecture plugins to work again while using the C++ API DefaultAnalyzeBasicBlocks Use default ABB from Python plugins Fix bug in API ArchAndAddr operator overload Python APIs for basic block analysis
Diffstat (limited to 'defaultabb')
-rw-r--r--defaultabb/CMakeLists.txt50
-rw-r--r--defaultabb/plugin.cpp12
2 files changed, 62 insertions, 0 deletions
diff --git a/defaultabb/CMakeLists.txt b/defaultabb/CMakeLists.txt
new file mode 100644
index 00000000..1594ec8a
--- /dev/null
+++ b/defaultabb/CMakeLists.txt
@@ -0,0 +1,50 @@
+cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
+
+project(defaultabb)
+
+if(NOT BN_INTERNAL_BUILD)
+ add_subdirectory(${PROJECT_SOURCE_DIR}/../.. ${PROJECT_BINARY_DIR}/api)
+endif()
+
+file(GLOB SOURCES
+ *.cpp
+ *.h)
+
+if(DEMO)
+ add_library(defaultabb STATIC ${SOURCES})
+else()
+ add_library(defaultabb SHARED ${SOURCES})
+endif()
+
+target_include_directories(defaultabb
+ PRIVATE ${PROJECT_SOURCE_DIR}
+)
+
+if(WIN32)
+ target_link_directories(defaultabb
+ PRIVATE ${BN_INSTALL_DIR})
+ target_link_libraries(defaultabb binaryninjaapi)
+else()
+ target_link_libraries(defaultabb binaryninjaapi)
+endif()
+
+if(UNIX AND NOT APPLE)
+ target_link_options(defaultabb PRIVATE "LINKER:--exclude-libs,ALL")
+endif()
+
+set_target_properties(defaultabb PROPERTIES
+ CXX_STANDARD 17
+ 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(defaultabb)
+ set_target_properties(defaultabb PROPERTIES
+ LIBRARY_OUTPUT_DIRECTORY ${BN_CORE_PLUGIN_DIR}
+ RUNTIME_OUTPUT_DIRECTORY ${BN_CORE_PLUGIN_DIR})
+endif()
diff --git a/defaultabb/plugin.cpp b/defaultabb/plugin.cpp
new file mode 100644
index 00000000..917a03ee
--- /dev/null
+++ b/defaultabb/plugin.cpp
@@ -0,0 +1,12 @@
+#include "binaryninjaapi.h"
+#include "binaryninjacore.h"
+
+using namespace BinaryNinja;
+
+extern "C" {
+ BN_DECLARE_CORE_ABI_VERSION
+ BINARYNINJAPLUGIN bool CorePluginInit()
+ {
+ return BNArchitectureSetDefaultAnalyzeBasicBlocksCallback((void *)Architecture::DefaultAnalyzeBasicBlocksCallback);
+ }
+}