Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions ports/detours/CONTROL
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Source: detours
Version: 4.0.1
Description: Detours is a software package for monitoring and instrumenting API calls on Windows.
24 changes: 24 additions & 0 deletions ports/detours/find-jmp-bounds-arm64.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
diff --git a/src/detours.cpp b/src/detours.cpp
index 8345c4d..3cd0e9d 100644
--- a/src/detours.cpp
+++ b/src/detours.cpp
@@ -974,6 +974,19 @@ inline PBYTE detour_skip_jmp(PBYTE pbCode, PVOID *ppGlobals)
return pbCode;
}

+inline void detour_find_jmp_bounds(PBYTE pbCode,
+ PDETOUR_TRAMPOLINE *ppLower,
+ PDETOUR_TRAMPOLINE *ppUpper)
+{
+ // We have to place trampolines within +/- 2GB of code.
+ ULONG_PTR lo = detour_2gb_below((ULONG_PTR)pbCode);
+ ULONG_PTR hi = detour_2gb_above((ULONG_PTR)pbCode);
+ DETOUR_TRACE(("[%p..%p..%p]\n", lo, pbCode, hi));
+
+ *ppLower = (PDETOUR_TRAMPOLINE)lo;
+ *ppUpper = (PDETOUR_TRAMPOLINE)hi;
+}
+
inline BOOL detour_does_code_end_function(PBYTE pbCode)
{
ULONG Opcode = fetch_opcode(pbCode);
28 changes: 28 additions & 0 deletions ports/detours/portfile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
include(vcpkg_common_functions)
find_program(NMAKE nmake)

vcpkg_check_linkage(ONLY_STATIC_LIBRARY)

vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO Microsoft/Detours
REF v4.0.1
SHA512 0a9c21b8222329add2de190d2e94d99195dfa55de5a914b75d380ffe0fb787b12e016d0723ca821001af0168fd1643ffd2455298bf3de5fdc155b3393a3ccc87
HEAD_REF master
PATCHES
find-jmp-bounds-arm64.patch
)

set(ENV{DETOURS_TARGET_PROCESSOR} "${VCPKG_TARGET_ARCHITECTURE}")

vcpkg_execute_required_process(
COMMAND ${NMAKE}
WORKING_DIRECTORY ${SOURCE_PATH}/src
LOGNAME build-${TARGET_TRIPLET}
)

# Detours does not differentiate between Release and Debug builds, use the same binaries for both.
file(INSTALL ${SOURCE_PATH}/lib.${VCPKG_TARGET_ARCHITECTURE}/ DESTINATION ${CURRENT_PACKAGES_DIR}/lib)
file(INSTALL ${SOURCE_PATH}/lib.${VCPKG_TARGET_ARCHITECTURE}/ DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib)
file(INSTALL ${SOURCE_PATH}/include DESTINATION ${CURRENT_PACKAGES_DIR})
file(INSTALL ${SOURCE_PATH}/LICENSE.md DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)