Skip to content

Commit cb341c9

Browse files
committed
Add more plugins to free
Adds WARP, DWARF Import and Objective-C plugins to free
1 parent f2c843d commit cb341c9

File tree

20 files changed

+652
-183
lines changed

20 files changed

+652
-183
lines changed

Cargo.lock

Lines changed: 59 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ members = [
1111
"rust/plugin_examples/data_renderer",
1212
"view/minidump",
1313
"plugins/dwarf/dwarf_import",
14+
"plugins/dwarf/dwarf_import/demo",
1415
"plugins/dwarf/dwarf_export",
1516
"plugins/dwarf/dwarfdump",
1617
"plugins/dwarf/shared",
@@ -20,7 +21,9 @@ members = [
2021
"plugins/svd",
2122
"plugins/svd/demo",
2223
"plugins/warp",
24+
"plugins/warp/demo",
2325
"plugins/workflow_objc",
26+
"plugins/workflow_objc/demo",
2427
]
2528

2629
[workspace.dependencies]

plugins/dwarf/dwarf_import/CMakeLists.txt

Lines changed: 139 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -2,92 +2,167 @@ cmake_minimum_required(VERSION 3.15 FATAL_ERROR)
22

33
project(dwarf_import)
44

5-
file(GLOB PLUGIN_SOURCES CONFIGURE_DEPENDS
6-
${PROJECT_SOURCE_DIR}/Cargo.toml
7-
${PROJECT_SOURCE_DIR}/src/*.rs
8-
${PROJECT_SOURCE_DIR}/../shared/Cargo.toml
9-
${PROJECT_SOURCE_DIR}/../shared/src/*.rs)
5+
if(NOT BN_API_BUILD_EXAMPLES AND NOT BN_INTERNAL_BUILD)
6+
if(NOT BN_API_PATH)
7+
# If we have not already defined the API source directory try and find it.
8+
find_path(
9+
BN_API_PATH
10+
NAMES binaryninjaapi.h
11+
# List of paths to search for the clone of the api
12+
HINTS ../../.. ../../binaryninja/api/ binaryninjaapi binaryninja-api $ENV{BN_API_PATH}
13+
REQUIRED
14+
)
15+
endif()
16+
set(CARGO_STABLE_VERSION 1.83.0)
17+
add_subdirectory(${BN_API_PATH} binaryninjaapi)
18+
endif()
1019

11-
file(GLOB API_SOURCES CONFIGURE_DEPENDS
12-
${PROJECT_SOURCE_DIR}/../../../binaryninjacore.h
13-
${PROJECT_SOURCE_DIR}/../../../rust/binaryninjacore-sys/build.rs
14-
${PROJECT_SOURCE_DIR}/../../../rust/binaryninjacore-sys/Cargo.toml
15-
${PROJECT_SOURCE_DIR}/../../../rust/binaryninjacore-sys/src/*
16-
${PROJECT_SOURCE_DIR}/../../../rust/Cargo.toml
17-
${PROJECT_SOURCE_DIR}/../../../rust/src/*.rs)
20+
file(GLOB_RECURSE PLUGIN_SOURCES CONFIGURE_DEPENDS
21+
${PROJECT_SOURCE_DIR}/Cargo.toml
22+
${PROJECT_SOURCE_DIR}/src/*.rs)
1823

1924
if(CMAKE_BUILD_TYPE MATCHES Debug)
20-
set(TARGET_DIR ${PROJECT_BINARY_DIR}/target/debug)
21-
set(CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR}/target)
25+
if(DEMO)
26+
set(TARGET_DIR ${PROJECT_BINARY_DIR}/target/dev-demo)
27+
set(CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR}/target --profile=dev-demo)
28+
else()
29+
set(TARGET_DIR ${PROJECT_BINARY_DIR}/target/debug)
30+
set(CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR}/target)
31+
endif()
2232
else()
23-
set(TARGET_DIR ${PROJECT_BINARY_DIR}/target/release)
24-
set(CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR}/target --release)
25-
set(OUTPUT_PDB_NAME ${CMAKE_SHARED_LIBRARY_PREFIX}dwarf_import.pdb)
33+
if(DEMO)
34+
set(TARGET_DIR ${PROJECT_BINARY_DIR}/target/release-demo)
35+
set(CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR}/target --profile=release-demo)
36+
else()
37+
set(TARGET_DIR ${PROJECT_BINARY_DIR}/target/release)
38+
set(CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR}/target --release)
39+
endif()
40+
endif()
41+
42+
if(FORCE_COLORED_OUTPUT)
43+
set(CARGO_OPTS ${CARGO_OPTS} --color always)
2644
endif()
2745

28-
set(OUTPUT_FILE ${CMAKE_STATIC_LIBRARY_PREFIX}dwarf_import${CMAKE_SHARED_LIBRARY_SUFFIX})
29-
set(PLUGIN_PATH ${TARGET_DIR}/${OUTPUT_FILE})
46+
if(DEMO)
47+
set(CARGO_FEATURES --features demo --manifest-path ${PROJECT_SOURCE_DIR}/demo/Cargo.toml)
3048

31-
add_custom_target(dwarf_import ALL DEPENDS ${PLUGIN_PATH})
32-
add_dependencies(dwarf_import binaryninjaapi)
49+
set(OUTPUT_FILE_NAME ${CMAKE_STATIC_LIBRARY_PREFIX}${PROJECT_NAME}_static${CMAKE_STATIC_LIBRARY_SUFFIX})
50+
set(OUTPUT_PDB_NAME ${CMAKE_STATIC_LIBRARY_PREFIX}${PROJECT_NAME}.pdb)
51+
set(OUTPUT_FILE_PATH ${CMAKE_BINARY_DIR}/${OUTPUT_FILE_NAME})
52+
set(OUTPUT_PDB_PATH ${CMAKE_BINARY_DIR}/${OUTPUT_PDB_NAME})
3353

34-
find_program(RUSTUP_PATH rustup REQUIRED HINTS ~/.cargo/bin)
35-
if(CARGO_API_VERSION)
36-
set(RUSTUP_COMMAND ${RUSTUP_PATH} run ${CARGO_API_VERSION} cargo build)
54+
set(BINJA_LIB_DIR $<TARGET_FILE_DIR:binaryninjacore>)
3755
else()
38-
set(RUSTUP_COMMAND ${RUSTUP_PATH} run ${CARGO_STABLE_VERSION} cargo build)
56+
# NOTE: --no-default-features is set to disable building artifacts used for testing
57+
# NOTE: the linker is looking in the target dir and linking on it apparently.
58+
set(CARGO_FEATURES "--no-default-features")
59+
60+
set(OUTPUT_FILE_NAME ${CMAKE_SHARED_LIBRARY_PREFIX}${PROJECT_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX})
61+
set(OUTPUT_PDB_NAME ${CMAKE_SHARED_LIBRARY_PREFIX}${PROJECT_NAME}.pdb)
62+
set(OUTPUT_FILE_PATH ${BN_CORE_PLUGIN_DIR}/${OUTPUT_FILE_NAME})
63+
set(OUTPUT_PDB_PATH ${BN_CORE_PLUGIN_DIR}/${OUTPUT_PDB_NAME})
64+
65+
set(BINJA_LIB_DIR ${BN_INSTALL_BIN_DIR})
3966
endif()
4067

68+
69+
add_custom_target(${PROJECT_NAME} ALL DEPENDS ${OUTPUT_FILE_PATH})
70+
add_dependencies(${PROJECT_NAME} binaryninjaapi)
71+
get_target_property(BN_API_SOURCE_DIR binaryninjaapi SOURCE_DIR)
72+
list(APPEND CMAKE_MODULE_PATH "${BN_API_SOURCE_DIR}/cmake")
73+
find_package(BinaryNinjaCore REQUIRED)
74+
75+
set_property(TARGET ${PROJECT_NAME} PROPERTY OUTPUT_FILE_PATH ${OUTPUT_FILE_PATH})
76+
77+
# Add the whole api to the depends too
78+
file(GLOB API_SOURCES CONFIGURE_DEPENDS
79+
${BN_API_SOURCE_DIR}/binaryninjacore.h
80+
${BN_API_SOURCE_DIR}/rust/src/*.rs
81+
${BN_API_SOURCE_DIR}/rust/binaryninjacore-sys/src/*.rs)
82+
83+
find_program(RUSTUP_PATH rustup REQUIRED HINTS ~/.cargo/bin)
84+
set(RUSTUP_COMMAND ${RUSTUP_PATH} run ${CARGO_STABLE_VERSION} cargo)
85+
4186
if(APPLE)
4287
if(UNIVERSAL)
4388
if(CMAKE_BUILD_TYPE MATCHES Debug)
44-
set(AARCH64_LIB_PATH ${PROJECT_BINARY_DIR}/target/aarch64-apple-darwin/debug/${OUTPUT_FILE})
45-
set(X86_64_LIB_PATH ${PROJECT_BINARY_DIR}/target/x86_64-apple-darwin/debug/${OUTPUT_FILE})
89+
if(DEMO)
90+
set(AARCH64_LIB_PATH ${PROJECT_BINARY_DIR}/target/aarch64-apple-darwin/dev-demo/${OUTPUT_FILE_NAME})
91+
set(X86_64_LIB_PATH ${PROJECT_BINARY_DIR}/target/x86_64-apple-darwin/dev-demo/${OUTPUT_FILE_NAME})
92+
else()
93+
set(AARCH64_LIB_PATH ${PROJECT_BINARY_DIR}/target/aarch64-apple-darwin/debug/${OUTPUT_FILE_NAME})
94+
set(X86_64_LIB_PATH ${PROJECT_BINARY_DIR}/target/x86_64-apple-darwin/debug/${OUTPUT_FILE_NAME})
95+
endif()
4696
else()
47-
set(AARCH64_LIB_PATH ${PROJECT_BINARY_DIR}/target/aarch64-apple-darwin/release/${OUTPUT_FILE})
48-
set(X86_64_LIB_PATH ${PROJECT_BINARY_DIR}/target/x86_64-apple-darwin/release/${OUTPUT_FILE})
97+
if(DEMO)
98+
set(AARCH64_LIB_PATH ${PROJECT_BINARY_DIR}/target/aarch64-apple-darwin/release-demo/${OUTPUT_FILE_NAME})
99+
set(X86_64_LIB_PATH ${PROJECT_BINARY_DIR}/target/x86_64-apple-darwin/release-demo/${OUTPUT_FILE_NAME})
100+
else()
101+
set(AARCH64_LIB_PATH ${PROJECT_BINARY_DIR}/target/aarch64-apple-darwin/release/${OUTPUT_FILE_NAME})
102+
set(X86_64_LIB_PATH ${PROJECT_BINARY_DIR}/target/x86_64-apple-darwin/release/${OUTPUT_FILE_NAME})
103+
endif()
49104
endif()
50105

51106
add_custom_command(
52-
OUTPUT ${PLUGIN_PATH}
53-
COMMAND ${CMAKE_COMMAND} -E env
54-
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BN_CORE_OUTPUT_DIR}
55-
${RUSTUP_COMMAND} --target=aarch64-apple-darwin ${CARGO_OPTS}
56-
COMMAND ${CMAKE_COMMAND} -E env
57-
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BN_CORE_OUTPUT_DIR}
58-
${RUSTUP_COMMAND} --target=x86_64-apple-darwin ${CARGO_OPTS}
59-
COMMAND mkdir -p ${TARGET_DIR}
60-
COMMAND lipo -create ${AARCH64_LIB_PATH} ${X86_64_LIB_PATH} -output ${PLUGIN_PATH}
61-
COMMAND ${CMAKE_COMMAND} -E copy ${PLUGIN_PATH} ${BN_CORE_PLUGIN_DIR}
62-
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
63-
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES})
107+
OUTPUT ${OUTPUT_FILE_PATH}
108+
COMMAND ${CMAKE_COMMAND} -E env
109+
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
110+
${RUSTUP_COMMAND} clean --target=aarch64-apple-darwin ${CARGO_OPTS} --package binaryninjacore-sys
111+
COMMAND ${CMAKE_COMMAND} -E env
112+
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
113+
${RUSTUP_COMMAND} clean --target=x86_64-apple-darwin ${CARGO_OPTS} --package binaryninjacore-sys
114+
COMMAND ${CMAKE_COMMAND} -E env
115+
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
116+
${RUSTUP_COMMAND} build --target=aarch64-apple-darwin ${CARGO_OPTS} ${CARGO_FEATURES}
117+
COMMAND ${CMAKE_COMMAND} -E env
118+
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
119+
${RUSTUP_COMMAND} build --target=x86_64-apple-darwin ${CARGO_OPTS} ${CARGO_FEATURES}
120+
COMMAND lipo -create ${AARCH64_LIB_PATH} ${X86_64_LIB_PATH} -output ${OUTPUT_FILE_PATH}
121+
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
122+
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
123+
)
64124
else()
65-
if(CMAKE_BUILD_TYPE MATCHES Debug)
66-
set(LIB_PATH ${PROJECT_BINARY_DIR}/target/debug/${OUTPUT_FILE})
67-
else()
68-
set(LIB_PATH ${PROJECT_BINARY_DIR}/target/release/${OUTPUT_FILE})
69-
endif()
70-
71125
add_custom_command(
72-
OUTPUT ${PLUGIN_PATH}
73-
COMMAND ${CMAKE_COMMAND} -E env MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BN_CORE_OUTPUT_DIR} ${RUSTUP_COMMAND} ${CARGO_OPTS}
74-
COMMAND ${CMAKE_COMMAND} -E copy ${PLUGIN_PATH} ${BN_CORE_PLUGIN_DIR}
75-
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
76-
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES})
126+
OUTPUT ${OUTPUT_FILE_PATH}
127+
COMMAND ${CMAKE_COMMAND} -E env
128+
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
129+
${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
130+
COMMAND ${CMAKE_COMMAND} -E env
131+
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
132+
${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
133+
COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
134+
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
135+
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
136+
)
77137
endif()
78138
elseif(WIN32)
79-
add_custom_command(
80-
OUTPUT ${PLUGIN_PATH}
81-
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BN_CORE_OUTPUT_DIR} ${RUSTUP_COMMAND} ${CARGO_OPTS}
82-
COMMAND ${CMAKE_COMMAND} -E copy ${PLUGIN_PATH} ${BN_CORE_PLUGIN_DIR}
83-
COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_PDB_NAME} ${BN_CORE_PLUGIN_DIR}
84-
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
85-
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES})
139+
if(DEMO)
140+
add_custom_command(
141+
OUTPUT ${OUTPUT_FILE_PATH}
142+
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS}
143+
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
144+
COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
145+
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
146+
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
147+
)
148+
else()
149+
add_custom_command(
150+
OUTPUT ${OUTPUT_FILE_PATH}
151+
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
152+
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
153+
COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
154+
COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_PDB_NAME} ${OUTPUT_PDB_PATH}
155+
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
156+
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
157+
)
158+
endif()
86159
else()
87160
add_custom_command(
88-
OUTPUT ${PLUGIN_PATH}
89-
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BN_CORE_OUTPUT_DIR} ${RUSTUP_COMMAND} ${CARGO_OPTS}
90-
COMMAND ${CMAKE_COMMAND} -E copy ${PLUGIN_PATH} ${BN_CORE_PLUGIN_DIR}
91-
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
92-
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES})
161+
OUTPUT ${OUTPUT_FILE_PATH}
162+
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
163+
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
164+
COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
165+
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
166+
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
167+
)
93168
endif()

plugins/dwarf/dwarf_import/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ license = "Apache-2.0"
77
[lib]
88
crate-type = ["cdylib"]
99

10+
[features]
11+
demo = []
12+
1013
[dependencies]
1114
dwarfreader = { path = "../shared/" }
1215
binaryninja.workspace = true
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
[package]
2+
name = "dwarf_import-static"
3+
version = "0.1.0"
4+
edition = "2021"
5+
license = "Apache-2.0"
6+
7+
[lib]
8+
crate-type = ["staticlib"]
9+
path = "../src/lib.rs"
10+
11+
[features]
12+
demo = []
13+
14+
[dependencies]
15+
dwarfreader = { path = "../../shared/" }
16+
binaryninja = { workspace = true, features = ["demo"]}
17+
binaryninjacore-sys.workspace = true
18+
gimli = "0.31"
19+
log = "0.4"
20+
iset = "0.2.2"
21+
cpp_demangle = "0.4.3"
22+
regex = "1"
23+
indexmap = "2.5.0"
24+
object = "0.36"
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
fn main() {
2+
let link_path = std::env::var_os("DEP_BINARYNINJACORE_PATH")
3+
.expect("DEP_BINARYNINJACORE_PATH not specified");
4+
5+
println!("cargo::rustc-link-lib=dylib=binaryninjacore");
6+
println!(
7+
"cargo::rustc-link-search={}",
8+
link_path
9+
.to_str()
10+
.expect("Failed to convert link path to string")
11+
);
12+
13+
#[cfg(target_os = "linux")]
14+
{
15+
println!(
16+
"cargo::rustc-link-arg=-Wl,-rpath,{0},-L{0}",
17+
link_path.to_string_lossy()
18+
);
19+
}
20+
21+
#[cfg(target_os = "macos")]
22+
{
23+
let crate_name = std::env::var("CARGO_PKG_NAME").expect("CARGO_PKG_NAME not set");
24+
let lib_name = crate_name.replace('-', "_");
25+
println!(
26+
"cargo::rustc-link-arg=-Wl,-install_name,@rpath/lib{}.dylib",
27+
lib_name
28+
);
29+
}
30+
}

0 commit comments

Comments
 (0)