尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

3种方式集成SafetyHook:CMake FetchContent、vcpkg与Amalgamated构建完整教程

3种方式集成SafetyHook:CMake FetchContent、vcpkg与Amalgamated构建完整教程 3种方式集成SafetyHookCMake FetchContent、vcpkg与Amalgamated构建完整教程【免费下载链接】safetyhookC23 procedure hooking library.项目地址: https://gitcode.com/gh_mirrors/sa/safetyhookSafetyHook 是一款C23 过程函数 Hooking过程挂钩库本教程将带你用CMake FetchContent、vcpkg、Amalgamated 构建3 种方式把它集成进自己的项目。无论你用 CMake 管理构建、依赖 vcpkg 包管理器还是只想两个文件直接嵌入5 分钟就能配好。开始之前SafetyHook 是什么SafetyHook 的目标是让运行时函数 Hook尽可能安全。它在创建/删除钩子时会 自动暂停其他线程并修正可能受影响的线程指令指针 修正重定位指令的相对偏移如jmp、lea rip⚡ 自动把短分支拓宽为近分支支持落入跳板的短分支基于Zydis现代反汇编引擎API 设计上手即用不易出错硬性前提3 种方式都需要要求说明C23 编译器库以cxx_std_23编译见 cmake.toml 中compile-featuresZydis 依赖反汇编引擎下面每种方式都能自动带上平台Windows / Linuxx86 与 x86_64对应src/os.windows.cpp、src/os.linux.cpp方式一CMake FetchContent 自动拉取推荐如果你用 CMake这是最省心的方式——配置时自动克隆并构建 SafetyHook版本可控、更新方便。在你的CMakeLists.txt中加入include(FetchContent) FetchContent_Declare( safetyhook GIT_REPOSITORY https://gitcode.com/gh_mirrors/sa/safetyhook GIT_TAG main ) FetchContent_MakeAvailable(safetyhook) # 链接到你的目标 target_link_libraries(your_target PRIVATE safetyhook::safetyhook)再让 SafetyHook 顺带拉取 Zydisv4.0.0定义见cmake.toml的fetch-zydis段cmake -B build -DSAFETYHOOK_FETCH_ZYDISON cmake --build build✅ 效果首次配置后 CMake 自动克隆、编译出静态库safetyhook::safetyhook你的目标直接链接即可无需手动维护第三方源码。方式二vcpkg 一行命令安装项目自带 vcpkg.json 清单文件其中已声明反汇编依赖bddisasm。如果你的工程使用 vcpkg 清单模式manifest mode在自己的vcpkg.json里加入{ dependencies: [safetyhook] }然后执行vcpkg installvcpkg 会自动拉取 SafetyHook 及其反汇编依赖并生成对应的 CMake 配置你只需在 CMakeLists 里find_package(safetyhook REQUIRED)后链接safetyhook::safetyhook即可。 适合团队环境统一依赖版本、或不想在 CMakeLists 里写 FetchContent 块的项目。方式三Amalgamated 构建——两个文件直接嵌入SafetyHook 提供 amalgamate.py 脚本可把全部头文件与源码合并成safetyhook.hppsafetyhook.cpp两个文件适合不用 CMake 集成或需要分发源码的场景。两种获取方式1. 直接下载预制包最简单从项目 Releases 页面下载 Amalgamated ZIP可选含 Zydis 的版本若你项目里已有 Zydis 就选不含的把文件拷进工程即可。使用静态编译的 Zydis 时记得定义ZYDIS_STATIC_BUILD。2. 本地自行生成始终最新需要 Python 3见CMakeLists.txt的SAFETYHOOK_AMALGAMATE目标cmake -B build -DSAFETYHOOK_AMALGAMATEON cmake --build build --target amalgamation产物输出到amalgamated-dist/目录把两个文件加入你的工程参与编译即可——完全不需要构建系统支持Makefile、MSBuild、手工编译都能用。3 种方式怎么选一张表看懂方式适用场景优点注意点CMake FetchContentCMake 工程首选自动克隆构建、版本可控首次配置需联网vcpkg已用 vcpkg 的团队一行安装、依赖自动解决需先配置 vcpkgAmalgamated非 CMake 工程 / 代码分发无构建系统依赖仅两个文件升级时需手动同步文件常见坑位清单 ⚠️编译器必须支持 C23否则在cxx_std_23处直接报错。找不到 Zydis源码中会明确报Zydis not found见src/inline_hook.cpp检查是否开启-DSAFETYHOOK_FETCH_ZYDISON或补装依赖。禁止源码目录内构建必须在独立 build 目录执行cmake -B build否则直接 FATAL_ERROR。被 Hook 的函数别被内联用项目自带的SAFETYHOOK_NOINLINE宏定义于include/safetyhook/common.hpp。5 分钟跑通第一个例子仓库自带示例 example/minimal.cppHook 一个add函数把入参翻倍再还原。构建并运行cmake -B build -DSAFETYHOOK_FETCH_ZYDISON -DSAFETYHOOK_BUILD_EXAMPLESON cmake --build build --target example-minimal核心逻辑只有两行易用的 Easy API 定义在include/safetyhook/easy.hppg_add_hook safetyhook::create_inline(add, hook_add); // 创建钩子 g_add_hook {}; // 移除钩子恭喜至此你已掌握 SafetyHook 的 3 种集成方式。按项目现状任选其一即可安全地开始你的运行时函数 Hook 之旅。【免费下载链接】safetyhookC23 procedure hooking library.项目地址: https://gitcode.com/gh_mirrors/sa/safetyhook创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表