Skip to content

Commit 8250f32

Browse files
committed
Stop letting bad rpaths into built plugins.
1 parent 0a24831 commit 8250f32

13 files changed

Lines changed: 50 additions & 2 deletions

File tree

arch/msp430/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ else()
108108
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
109109
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
110110
COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
111+
COMMAND ${CMAKE_COMMAND} -DRPATH_KIND=plugin -DBINARY_PATH=${OUTPUT_FILE_PATH} -P "${BN_API_SOURCE_DIR}/cmake/SetElfRpath.cmake"
111112
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
112113
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
113114
)

arch/riscv/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ else()
108108
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
109109
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
110110
COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
111+
COMMAND ${CMAKE_COMMAND} -DRPATH_KIND=plugin -DBINARY_PATH=${OUTPUT_FILE_PATH} -P "${BN_API_SOURCE_DIR}/cmake/SetElfRpath.cmake"
111112
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
112113
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
113114
)

cmake/SetElfRpath.cmake

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
if(NOT DEFINED BINARY_PATH)
2+
message(FATAL_ERROR "BINARY_PATH is required")
3+
endif()
4+
5+
if(NOT DEFINED RPATH_KIND)
6+
message(FATAL_ERROR "RPATH_KIND is required")
7+
endif()
8+
9+
if(RPATH_KIND STREQUAL "plugin")
10+
set(BN_ELF_RPATH "$ORIGIN/..")
11+
elseif(RPATH_KIND STREQUAL "plugin-with-local-deps")
12+
set(BN_ELF_RPATH "$ORIGIN:$ORIGIN/..")
13+
else()
14+
message(FATAL_ERROR "Unsupported RPATH_KIND: ${RPATH_KIND}")
15+
endif()
16+
17+
find_program(PATCHELF_EXECUTABLE patchelf REQUIRED)
18+
execute_process(
19+
COMMAND "${PATCHELF_EXECUTABLE}" --set-rpath "${BN_ELF_RPATH}" "${BINARY_PATH}"
20+
RESULT_VARIABLE PATCHELF_RESULT
21+
OUTPUT_VARIABLE PATCHELF_OUTPUT
22+
ERROR_VARIABLE PATCHELF_ERROR)
23+
24+
if(NOT PATCHELF_RESULT EQUAL 0)
25+
message(FATAL_ERROR "patchelf failed for ${BINARY_PATH}: ${PATCHELF_ERROR}${PATCHELF_OUTPUT}")
26+
endif()

plugins/bntl_utils/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ else()
162162
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
163163
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
164164
COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
165+
COMMAND ${CMAKE_COMMAND} -DRPATH_KIND=plugin -DBINARY_PATH=${OUTPUT_FILE_PATH} -P "${BN_API_SOURCE_DIR}/cmake/SetElfRpath.cmake"
165166
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
166167
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
167168
)

plugins/dwarf/dwarf_export/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ set(PLUGIN_PATH ${TARGET_DIR}/${OUTPUT_FILE})
3131
add_custom_target(dwarf_export ALL DEPENDS ${PLUGIN_PATH})
3232
add_dependencies(dwarf_export binaryninjaapi)
3333

34+
get_target_property(BN_API_SOURCE_DIR binaryninjaapi SOURCE_DIR)
35+
3436
find_program(RUSTUP_PATH rustup REQUIRED HINTS ~/.cargo/bin)
3537
if(CARGO_API_VERSION)
3638
set(RUSTUP_COMMAND ${RUSTUP_PATH} run ${CARGO_API_VERSION} cargo build)
@@ -88,6 +90,7 @@ else()
8890
OUTPUT ${PLUGIN_PATH}
8991
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BN_CORE_OUTPUT_DIR} ${RUSTUP_COMMAND} ${CARGO_OPTS}
9092
COMMAND ${CMAKE_COMMAND} -E copy ${PLUGIN_PATH} ${BN_CORE_PLUGIN_DIR}
93+
COMMAND ${CMAKE_COMMAND} -DRPATH_KIND=plugin -DBINARY_PATH="${BN_CORE_PLUGIN_DIR}/${OUTPUT_FILE}" -P "${BN_API_SOURCE_DIR}/cmake/SetElfRpath.cmake"
9194
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
9295
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES})
9396
endif()

plugins/dwarf/dwarf_import/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,11 +157,17 @@ elseif(WIN32)
157157
)
158158
endif()
159159
else()
160+
if(DEMO)
161+
set(BN_FIX_RPATH_COMMAND ${CMAKE_COMMAND} -E true)
162+
else()
163+
set(BN_FIX_RPATH_COMMAND ${CMAKE_COMMAND} -DRPATH_KIND=plugin -DBINARY_PATH=${OUTPUT_FILE_PATH} -P "${BN_API_SOURCE_DIR}/cmake/SetElfRpath.cmake")
164+
endif()
160165
add_custom_command(
161166
OUTPUT ${OUTPUT_FILE_PATH}
162167
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
163168
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
164169
COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
170+
COMMAND ${BN_FIX_RPATH_COMMAND}
165171
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
166172
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
167173
)

plugins/idb_import/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ endif()
5454
add_custom_target(${PROJECT_NAME} ALL DEPENDS ${OUTPUT_FILE_PATH})
5555
add_dependencies(${PROJECT_NAME} binaryninjaapi)
5656

57+
get_target_property(BN_API_SOURCE_DIR binaryninjaapi SOURCE_DIR)
58+
5759
set_property(TARGET ${PROJECT_NAME} PROPERTY OUTPUT_FILE_PATH ${OUTPUT_FILE_PATH})
5860

5961
find_program(RUSTUP_PATH rustup REQUIRED HINTS ~/.cargo/bin)
@@ -127,6 +129,7 @@ else()
127129
OUTPUT ${OUTPUT_FILE_PATH}
128130
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
129131
COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
132+
COMMAND ${CMAKE_COMMAND} -DRPATH_KIND=plugin -DBINARY_PATH=${OUTPUT_FILE_PATH} -P "${BN_API_SOURCE_DIR}/cmake/SetElfRpath.cmake"
130133
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
131134
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES})
132135
endif()

plugins/pdb-ng/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ else()
146146
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
147147
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
148148
COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
149+
COMMAND ${CMAKE_COMMAND} -DRPATH_KIND=plugin -DBINARY_PATH=${OUTPUT_FILE_PATH} -P "${BN_API_SOURCE_DIR}/cmake/SetElfRpath.cmake"
149150
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
150151
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
151152
)

plugins/svd/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ else()
162162
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
163163
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
164164
COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
165+
COMMAND ${CMAKE_COMMAND} -DRPATH_KIND=plugin -DBINARY_PATH=${OUTPUT_FILE_PATH} -P "${BN_API_SOURCE_DIR}/cmake/SetElfRpath.cmake"
165166
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
166167
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
167168
)

plugins/warp/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ else()
176176
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
177177
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
178178
COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
179+
COMMAND ${CMAKE_COMMAND} -DRPATH_KIND=plugin -DBINARY_PATH=${OUTPUT_FILE_PATH} -P "${BN_API_SOURCE_DIR}/cmake/SetElfRpath.cmake"
179180
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
180181
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
181182
)

0 commit comments

Comments
 (0)