summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--CMakeLists.txt82
-rw-r--r--examples/CMakeLists.txt7
-rw-r--r--examples/bin-info/CMakeLists.txt18
-rw-r--r--examples/bin-info/src/bin-info.cpp30
-rw-r--r--examples/breakpoint/CMakeLists.txt40
-rw-r--r--examples/cmdline_disasm/CMakeLists.txt13
-rw-r--r--examples/llil_parser/CMakeLists.txt58
-rw-r--r--examples/llil_parser/src/llil_parser.cpp4
-rw-r--r--examples/mlil_parser/CMakeLists.txt58
-rw-r--r--examples/mlil_parser/src/mlil_parser.cpp4
-rw-r--r--examples/print_syscalls/CMakeLists.txt18
-rw-r--r--examples/print_syscalls/src/arm-syscall.cpp30
-rw-r--r--examples/x86_extension/CMakeLists.txt17
14 files changed, 215 insertions, 165 deletions
diff --git a/.gitignore b/.gitignore
index 607d2388..051ccb02 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,6 +33,7 @@ CTestTestfile.cmake
api-docs/source/python.rst
api-docs/source/index.rst
.coverage
+build
# Make
generator
plugins/
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 85009adc..b42b9d01 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,16 +1,82 @@
-cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.4 FATAL_ERROR)
project(binaryninja-api)
-file( GLOB SRCS *.cpp json/json.h json/jsoncpp.cpp json/json-forwards.h)
+option(BINJA_BUILD_EXAMPLES "Builds example plugins" OFF)
-add_library(binaryninjaapi STATIC ${SRCS})
+if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
+ if (MSVC)
+ message(FATAL_ERROR "Binary Ninja is 64-bit only (try -G \"${CMAKE_GENERATOR} Win64\")")
+ else()
+ message(FATAL_ERROR "Binary Ninja is 64-bit only")
+ endif()
+endif()
-set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
+if(WIN32)
+ set(BINJA_DIR "C:\\Program Files\\Vector35\\BinaryNinja"
+ CACHE PATH "Binary Ninja installation directory")
+ set(BINJA_BIN_DIR "${BINJA_DIR}"
+ CACHE PATH "Binary Ninja binary directory")
+ set(BINJA_PLUGINS_DIR "$ENV{APPDATA}/Binary Ninja/plugins"
+ CACHE PATH "Binary Ninja user plugins directory")
+elseif(APPLE)
+ set(BINJA_DIR "/Applications/Binary Ninja.app"
+ CACHE PATH "Binary Ninja installation directory")
+ set(BINJA_BIN_DIR "${BINJA_DIR}/Contents/MacOS"
+ CACHE PATH "Binary Ninja binary directory")
+ set(BINJA_PLUGINS_DIR "$ENV{HOME}/Library/Application Support/Binary Ninja/plugins"
+ CACHE PATH "Binary Ninja user plugins directory")
+else()
+ set(BINJA_DIR "$ENV{HOME}/binaryninja"
+ CACHE PATH "Binary Ninja installation directory")
+ set(BINJA_BIN_DIR "${BINJA_DIR}"
+ CACHE PATH "Binary Ninja binary directory")
+ set(BINJA_PLUGINS_DIR "$ENV{HOME}/.binaryninja/plugins"
+ CACHE PATH "Binary Ninja user plugins directory")
+endif()
-include_directories(${PROJECT_SOURCE_DIR})
+if(NOT BINJA_CORE_LIBRARY)
+ find_library(BINJA_CORE_LIBRARY
+ NAMES binaryninjacore libbinaryninjacore.so.1
+ PATHS ${BINJA_BIN_DIR})
+
+ if(BINJA_CORE_LIBRARY)
+ message(STATUS "Binary Ninja Core: ${BINJA_CORE_LIBRARY}")
+ else()
+ message(FATAL_ERROR "Binary Ninja Core Not Found")
+ endif()
+endif()
+
+file(GLOB BINJA_SOURCES *.cpp *.h json/json.h json/jsoncpp.cpp json/json-forwards.h)
+
+add_library(binaryninjaapi STATIC ${BINJA_SOURCES})
+
+target_include_directories(binaryninjaapi
+ PUBLIC ${PROJECT_SOURCE_DIR})
+
+target_link_libraries(binaryninjaapi
+ ${BINJA_CORE_LIBRARY})
set_target_properties(binaryninjaapi PROPERTIES
- CXX_STANDARD 11
- ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin
- )
+ CXX_STANDARD 11
+ CXX_VISIBILITY_PRESET hidden
+ VISIBILITY_INLINES_HIDDEN ON
+ POSITION_INDEPENDENT_CODE ON
+ ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
+
+function(binja_install_plugin target)
+ if(WIN32)
+ install(TARGETS ${target} RUNTIME
+ DESTINATION ${BINJA_PLUGINS_DIR})
+
+ install(FILES $<TARGET_PDB_FILE:${target}>
+ DESTINATION ${BINJA_PLUGINS_DIR} OPTIONAL)
+ else()
+ install(TARGETS ${target} LIBRARY
+ DESTINATION ${BINJA_PLUGINS_DIR})
+ endif()
+endfunction()
+
+if(BINJA_BUILD_EXAMPLES)
+ add_subdirectory(examples)
+endif()
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
new file mode 100644
index 00000000..10ff05da
--- /dev/null
+++ b/examples/CMakeLists.txt
@@ -0,0 +1,7 @@
+add_subdirectory(bin-info)
+add_subdirectory(breakpoint)
+add_subdirectory(cmdline_disasm)
+add_subdirectory(llil_parser)
+add_subdirectory(mlil_parser)
+add_subdirectory(print_syscalls)
+add_subdirectory(x86_extension)
diff --git a/examples/bin-info/CMakeLists.txt b/examples/bin-info/CMakeLists.txt
new file mode 100644
index 00000000..498a5793
--- /dev/null
+++ b/examples/bin-info/CMakeLists.txt
@@ -0,0 +1,18 @@
+cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
+
+project(bin-info CXX)
+
+add_executable(${PROJECT_NAME}
+ src/bin-info.cpp)
+
+target_link_libraries(${PROJECT_NAME}
+ binaryninjaapi)
+
+if (NOT WIN32)
+ target_link_libraries(${PROJECT_NAME}
+ dl)
+endif()
+
+set_target_properties(${PROJECT_NAME} PROPERTIES
+ CXX_STANDARD 11
+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../bin)
diff --git a/examples/bin-info/src/bin-info.cpp b/examples/bin-info/src/bin-info.cpp
index 2a9a5e98..b6a9ae79 100644
--- a/examples/bin-info/src/bin-info.cpp
+++ b/examples/bin-info/src/bin-info.cpp
@@ -10,11 +10,12 @@
#include "binaryninjacore.h"
#include "binaryninjaapi.h"
+#include "lowlevelilinstruction.h"
using namespace BinaryNinja;
using namespace std;
-#ifndef __WIN32__
+#ifndef _WIN32
#include <libgen.h>
#include <dlfcn.h>
string get_plugins_directory()
@@ -30,7 +31,7 @@ string get_plugins_directory()
#else
string get_plugins_directory()
{
- return "C:\\Program Files\\Vector35\\Binary Ninja\\plugins\\";
+ return "C:\\Program Files\\Vector35\\BinaryNinja\\plugins\\";
}
#endif
@@ -56,7 +57,7 @@ int main(int argc, char *argv[])
exit(-1);
}
- /* In order to initiate the bundled plugins properly, the location
+ /* In order to initiate the bundled plugins properly, the location
* of where bundled plugins directory is must be set. Since
* libbinaryninjacore is in the path get the path to it and use it to
* determine the plugins directory */
@@ -64,23 +65,24 @@ int main(int argc, char *argv[])
InitCorePlugins();
InitUserPlugins();
- auto bd = BinaryData(new FileMetadata(), fname);
- BinaryView *bv;
-
- for (auto type : BinaryViewType::GetViewTypes()) {
- if (type->IsTypeValidForData(&bd) && type->GetName() != "Raw") {
- bv = type->Create(&bd);
+ Ref<BinaryData> bd = new BinaryData(new FileMetadata(), argv[1]);
+ Ref<BinaryView> bv;
+ for (auto type : BinaryViewType::GetViewTypes())
+ {
+ if (type->IsTypeValidForData(bd) && type->GetName() != "Raw")
+ {
+ bv = type->Create(bd);
break;
}
}
- if (bv->GetTypeName() == "Raw"){
- cerr << "Error: Unable to get any other view type besides Raw";
- exit(-1);
+ if (!bv || bv->GetTypeName() == "Raw")
+ {
+ fprintf(stderr, "Input file does not appear to be an exectuable\n");
+ return -1;
}
- bv->UpdateAnalysis();
- while (bv->GetAnalysisProgress().state != IdleState);
+ bv->UpdateAnalysisAndWait();
cout << "Target: " << fname << endl << endl;
cout << "TYPE: " << bv->GetTypeName() << endl;
diff --git a/examples/breakpoint/CMakeLists.txt b/examples/breakpoint/CMakeLists.txt
index 916778c8..70de8884 100644
--- a/examples/breakpoint/CMakeLists.txt
+++ b/examples/breakpoint/CMakeLists.txt
@@ -3,43 +3,13 @@ cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
project(breakpoint CXX)
add_library(${PROJECT_NAME} SHARED
- src/breakpoint.cpp)
-
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../..)
-
-if(WIN32)
- set(BINJA_DIR "C:\\Program Files\\Vector35\\Binary Ninja"
- CACHE PATH "Binary Ninja installation directory")
- set(BINJA_BIN_DIR "${BINJA_DIR}")
- set(BINJA_PLUGINS_DIR "$ENV{APPDATA}/Binary Ninja/plugins"
- CACHE PATH "Binary Ninja user plugins directory")
-elseif(APPLE)
- set(BINJA_DIR "/Applications/Binary Ninja.app"
- CACHE PATH "Binary Ninja installation directory")
- set(BINJA_BIN_DIR "${BINJA_DIR}/Contents/MacOS")
- set(BINJA_PLUGINS_DIR "$ENV{HOME}/Library/Application Support/Binary Ninja/plugins"
- CACHE PATH "Binary Ninja user plugins directory")
-else()
- set(BINJA_DIR "$ENV{HOME}/binaryninja"
- CACHE PATH "Binary Ninja installation directory")
- set(BINJA_BIN_DIR "${BINJA_DIR}")
- set(BINJA_PLUGINS_DIR "$ENV{HOME}/.binaryninja/plugins"
- CACHE PATH "Binary Ninja user plugins directory")
-endif()
-
-find_library(BINJA_API_LIBRARY binaryninjaapi
- HINTS ${CMAKE_CURRENT_SOURCE_DIR}/../../bin)
-find_library(BINJA_CORE_LIBRARY binaryninjacore
- HINTS ${BINJA_BIN_DIR})
+ src/breakpoint.cpp)
target_link_libraries(${PROJECT_NAME}
- ${BINJA_API_LIBRARY}
- ${BINJA_CORE_LIBRARY}
- )
+ binaryninjaapi)
set_target_properties(${PROJECT_NAME} PROPERTIES
- CXX_STANDARD 11
- LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../bin
- )
+ CXX_STANDARD 11
+ LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../bin)
-install(TARGETS ${PROJECT_NAME} DESTINATION ${BINJA_PLUGINS_DIR})
+binja_install_plugin(${PROJECT_NAME})
diff --git a/examples/cmdline_disasm/CMakeLists.txt b/examples/cmdline_disasm/CMakeLists.txt
new file mode 100644
index 00000000..98e5f535
--- /dev/null
+++ b/examples/cmdline_disasm/CMakeLists.txt
@@ -0,0 +1,13 @@
+cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
+
+project(cmdline_disasm CXX)
+
+add_executable(${PROJECT_NAME}
+ src/disasm.cpp)
+
+target_link_libraries(${PROJECT_NAME}
+ binaryninjaapi)
+
+set_target_properties(${PROJECT_NAME} PROPERTIES
+ CXX_STANDARD 11
+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../bin)
diff --git a/examples/llil_parser/CMakeLists.txt b/examples/llil_parser/CMakeLists.txt
index 868a755e..dd850fc5 100644
--- a/examples/llil_parser/CMakeLists.txt
+++ b/examples/llil_parser/CMakeLists.txt
@@ -1,50 +1,18 @@
-# Mostly copied from https://github.com/Vector35/binaryninja-api/blob/dev/examples/breakpoint/CMakeLists.txt
+cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+project(llil_parser CXX)
-project(LLIL_Parser)
+add_executable(${PROJECT_NAME}
+ src/llil_parser.cpp)
-#-----------------------------------------------------------------------------
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../..)
-#-----------------------------------------------------------------------------
-set(SRCS src/llil_parser.cpp)
-#-----------------------------------------------------------------------------
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
-#-----------------------------------------------------------------------------
-if(WIN32)
- set(BINJA_DIR "C:\\Program Files\\Vector35\\BinaryNinja"
- CACHE PATH "Binary Ninja installation directory")
- set(BINJA_BIN_DIR "${BINJA_DIR}")
- set(BINJA_PLUGINS_DIR "$ENV{APPDATA}/Binary Ninja/plugins"
- CACHE PATH "Binary Ninja user plugins directory")
-elseif(APPLE)
- set(BINJA_DIR "/Applications/Binary Ninja.app"
- CACHE PATH "Binary Ninja installation directory")
- set(BINJA_BIN_DIR "${BINJA_DIR}/Contents/MacOS")
- set(BINJA_PLUGINS_DIR "$ENV{HOME}/Library/Application Support/Binary Ninja/plugins"
- CACHE PATH "Binary Ninja user plugins directory")
-else()
- set(BINJA_DIR "$ENV{HOME}/binaryninja"
- CACHE PATH "Binary Ninja installation directory")
- set(BINJA_BIN_DIR "${BINJA_DIR}")
- set(BINJA_PLUGINS_DIR "$ENV{HOME}/.binaryninja/plugins"
- CACHE PATH "Binary Ninja user plugins directory")
-endif()
-#-----------------------------------------------------------------------------
-add_executable (${PROJECT_NAME} ${SRCS})
-#-----------------------------------------------------------------------------
-find_library(BINJA_API_LIBRARY binaryninjaapi
- HINTS ${CMAKE_CURRENT_SOURCE_DIR}/../../bin ${CMAKE_CURRENT_SOURCE_DIR}/../../bin/Release ${CMAKE_CURRENT_SOURCE_DIR}/../../bin/Debug)
-find_library(BINJA_CORE_LIBRARY binaryninjacore
- HINTS ${BINJA_BIN_DIR})
-#-----------------------------------------------------------------------------
target_link_libraries(${PROJECT_NAME}
- ${BINJA_API_LIBRARY}
- ${BINJA_CORE_LIBRARY}
- )
-#-----------------------------------------------------------------------------
-install (TARGETS ${PROJECT_NAME}
- RUNTIME DESTINATION bin
- LIBRARY DESTINATION Lib
- ARCHIVE DESTINATION Lib)
+ binaryninjaapi)
+
+if (NOT WIN32)
+ target_link_libraries(${PROJECT_NAME}
+ dl)
+endif()
+set_target_properties(${PROJECT_NAME} PROPERTIES
+ CXX_STANDARD 11
+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../bin)
diff --git a/examples/llil_parser/src/llil_parser.cpp b/examples/llil_parser/src/llil_parser.cpp
index 982593a9..e23d32f6 100644
--- a/examples/llil_parser/src/llil_parser.cpp
+++ b/examples/llil_parser/src/llil_parser.cpp
@@ -8,7 +8,7 @@ using namespace BinaryNinja;
using namespace std;
-#ifndef __WIN32__
+#ifndef _WIN32
#include <libgen.h>
#include <dlfcn.h>
static string GetPluginsDirectory()
@@ -24,7 +24,7 @@ static string GetPluginsDirectory()
#else
static string GetPluginsDirectory()
{
- return "C:\\Program Files\\Vector35\\Binary Ninja\\plugins\\";
+ return "C:\\Program Files\\Vector35\\BinaryNinja\\plugins\\";
}
#endif
diff --git a/examples/mlil_parser/CMakeLists.txt b/examples/mlil_parser/CMakeLists.txt
index 4ec35591..4f4f450b 100644
--- a/examples/mlil_parser/CMakeLists.txt
+++ b/examples/mlil_parser/CMakeLists.txt
@@ -1,50 +1,18 @@
-# Mostly copied from https://github.com/Vector35/binaryninja-api/blob/dev/examples/breakpoint/CMakeLists.txt
+cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+project(mlil_parser CXX)
-project(MLIL_Parser)
+add_executable(${PROJECT_NAME}
+ src/mlil_parser.cpp)
-#-----------------------------------------------------------------------------
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../..)
-#-----------------------------------------------------------------------------
-set(SRCS src/mlil_parser.cpp)
-#-----------------------------------------------------------------------------
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
-#-----------------------------------------------------------------------------
-if(WIN32)
- set(BINJA_DIR "C:\\Program Files\\Vector35\\BinaryNinja"
- CACHE PATH "Binary Ninja installation directory")
- set(BINJA_BIN_DIR "${BINJA_DIR}")
- set(BINJA_PLUGINS_DIR "$ENV{APPDATA}/Binary Ninja/plugins"
- CACHE PATH "Binary Ninja user plugins directory")
-elseif(APPLE)
- set(BINJA_DIR "/Applications/Binary Ninja.app"
- CACHE PATH "Binary Ninja installation directory")
- set(BINJA_BIN_DIR "${BINJA_DIR}/Contents/MacOS")
- set(BINJA_PLUGINS_DIR "$ENV{HOME}/Library/Application Support/Binary Ninja/plugins"
- CACHE PATH "Binary Ninja user plugins directory")
-else()
- set(BINJA_DIR "$ENV{HOME}/binaryninja"
- CACHE PATH "Binary Ninja installation directory")
- set(BINJA_BIN_DIR "${BINJA_DIR}")
- set(BINJA_PLUGINS_DIR "$ENV{HOME}/.binaryninja/plugins"
- CACHE PATH "Binary Ninja user plugins directory")
-endif()
-#-----------------------------------------------------------------------------
-add_executable (${PROJECT_NAME} ${SRCS})
-#-----------------------------------------------------------------------------
-find_library(BINJA_API_LIBRARY binaryninjaapi
- HINTS ${CMAKE_CURRENT_SOURCE_DIR}/../../bin ${CMAKE_CURRENT_SOURCE_DIR}/../../bin/Release ${CMAKE_CURRENT_SOURCE_DIR}/../../bin/Debug)
-find_library(BINJA_CORE_LIBRARY binaryninjacore
- HINTS ${BINJA_BIN_DIR})
-#-----------------------------------------------------------------------------
target_link_libraries(${PROJECT_NAME}
- ${BINJA_API_LIBRARY}
- ${BINJA_CORE_LIBRARY}
- )
-#-----------------------------------------------------------------------------
-install (TARGETS ${PROJECT_NAME}
- RUNTIME DESTINATION bin
- LIBRARY DESTINATION Lib
- ARCHIVE DESTINATION Lib)
+ binaryninjaapi)
+
+if (NOT WIN32)
+ target_link_libraries(${PROJECT_NAME}
+ dl)
+endif()
+set_target_properties(${PROJECT_NAME} PROPERTIES
+ CXX_STANDARD 11
+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../bin)
diff --git a/examples/mlil_parser/src/mlil_parser.cpp b/examples/mlil_parser/src/mlil_parser.cpp
index a9411251..d73df2bc 100644
--- a/examples/mlil_parser/src/mlil_parser.cpp
+++ b/examples/mlil_parser/src/mlil_parser.cpp
@@ -8,7 +8,7 @@ using namespace BinaryNinja;
using namespace std;
-#ifndef __WIN32__
+#ifndef _WIN32
#include <libgen.h>
#include <dlfcn.h>
static string GetPluginsDirectory()
@@ -24,7 +24,7 @@ static string GetPluginsDirectory()
#else
static string GetPluginsDirectory()
{
- return "C:\\Program Files\\Vector35\\Binary Ninja\\plugins\\";
+ return "C:\\Program Files\\Vector35\\BinaryNinja\\plugins\\";
}
#endif
diff --git a/examples/print_syscalls/CMakeLists.txt b/examples/print_syscalls/CMakeLists.txt
new file mode 100644
index 00000000..d8495b3c
--- /dev/null
+++ b/examples/print_syscalls/CMakeLists.txt
@@ -0,0 +1,18 @@
+cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
+
+project(print_syscalls CXX)
+
+add_executable(${PROJECT_NAME}
+ src/arm-syscall.cpp)
+
+target_link_libraries(${PROJECT_NAME}
+ binaryninjaapi)
+
+if (NOT WIN32)
+ target_link_libraries(${PROJECT_NAME}
+ dl)
+endif()
+
+set_target_properties(${PROJECT_NAME} PROPERTIES
+ CXX_STANDARD 11
+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../bin)
diff --git a/examples/print_syscalls/src/arm-syscall.cpp b/examples/print_syscalls/src/arm-syscall.cpp
index 3424619b..2eb5e402 100644
--- a/examples/print_syscalls/src/arm-syscall.cpp
+++ b/examples/print_syscalls/src/arm-syscall.cpp
@@ -9,11 +9,12 @@
#include "binaryninjacore.h"
#include "binaryninjaapi.h"
+#include "lowlevelilinstruction.h"
using namespace BinaryNinja;
using namespace std;
-#ifndef __WIN32__
+#ifndef _WIN32
#include <libgen.h>
#include <dlfcn.h>
string get_plugins_directory()
@@ -29,7 +30,7 @@ string get_plugins_directory()
#else
string get_plugins_directory()
{
- return "C:\\Program Files\\Vector35\\Binary Ninja\\plugins\\";
+ return "C:\\Program Files\\Vector35\\BinaryNinja\\plugins\\";
}
#endif
@@ -63,23 +64,24 @@ int main(int argc, char *argv[])
InitCorePlugins();
InitUserPlugins();
- auto bd = BinaryData(new FileMetadata(), fname);
- BinaryView *bv = 0;
-
- for (auto type : BinaryViewType::GetViewTypesForData(&bd)) {
- if (type->GetName() != "Raw") {
- bv = type->Create(&bd);
+ Ref<BinaryData> bd = new BinaryData(new FileMetadata(), argv[1]);
+ Ref<BinaryView> bv;
+ for (auto type : BinaryViewType::GetViewTypes())
+ {
+ if (type->IsTypeValidForData(bd) && type->GetName() != "Raw")
+ {
+ bv = type->Create(bd);
break;
}
}
- if (!bv || bv->GetTypeName() == "Raw"){
- cerr << "Error: Unable to get any other view type besides Raw";
- exit(-1);
+ if (!bv || bv->GetTypeName() == "Raw")
+ {
+ fprintf(stderr, "Input file does not appear to be an exectuable\n");
+ return -1;
}
- bv->UpdateAnalysis();
- while (bv->GetAnalysisProgress().state != IdleState);
+ bv->UpdateAnalysisAndWait();
auto arch = bv->GetDefaultArchitecture();
auto platform = bv->GetDefaultPlatform();
@@ -100,7 +102,7 @@ int main(int argc, char *argv[])
auto instr = (*il_func)[il_func->GetIndexForInstruction(i)];
if (instr.operation == LLIL_SYSCALL) {
- auto reg_value = func->GetRegisterValueAtLowLevelILInstruction(i, reg);
+ auto reg_value = il_func->GetRegisterValueAtInstruction(reg, i);
cout << "System call address: 0x"
<< hex << instr.address
diff --git a/examples/x86_extension/CMakeLists.txt b/examples/x86_extension/CMakeLists.txt
new file mode 100644
index 00000000..632a9381
--- /dev/null
+++ b/examples/x86_extension/CMakeLists.txt
@@ -0,0 +1,17 @@
+cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
+
+project(x86_extension CXX)
+
+add_library(${PROJECT_NAME} SHARED
+ src/x86_extension.cpp
+ src/asmx86/asmx86.c
+ src/asmx86/asmx86.h)
+
+target_link_libraries(${PROJECT_NAME}
+ binaryninjaapi)
+
+set_target_properties(${PROJECT_NAME} PROPERTIES
+ CXX_STANDARD 11
+ LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../bin)
+
+binja_install_plugin(${PROJECT_NAME})