跳转至

安装

从源代码安装

安装依赖

Fedora/RHEL/AlmaLinux 操作系统

RHEL 系列兼容的发行版上,通过 rpmdnf/yum管理软件。

# 像 RHEL,有些发行版需要安装 epel-release 包,Fedora 不需要
$ sudo dnf install -y epel-release
$ sudo dnf group install -y "Development Tools"
$ sudo dnf install -y \
    bash-completion-devel \
    binutils-devel \
    capstone-devel \
    cmake \
    elfutils-devel \
    elfutils-libelf-devel \
    gcc \
    gcc-c++ \
    glibc-devel \
    libunwind-devel

Debian/Ubuntu 操作系统

Debian 系列兼容的发行版上,通过 dpkgapt 管理软件。

$ sudo apt install -y build-essential
$ sudo apt install -y \
    bash-completion \
    binutils-dev \
    cmake \
    gcc \
    libc6 \
    libcapstone-dev \
    libelf-dev \
    libunwind-dev

如果想要构建文档,需要安装:

$ sudo apt install -y mkdocs

然后,你可以在ulpatch仓库根目录执行 mkdocs buildmkdocs serve,然后访问 http://127.0.0.1:8000/ulpatch/

源码编译软件

$ git clone https://github.com/rtoax/ulpatch
$ cd ulpatch
$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/usr \
    -DCONFIG_BUILD_TESTING=OFF \
    -DCONFIG_BUILD_ULFTRACE=OFF \
    -DCONFIG_BUILD_ULTASK=OFF \
    ..
$ make -j$(nproc)

或者你可以通过指定 -B build 参数,像 cmake -B build -DCMAKE_BUILD_TYPE=Release。如果你想要编译时查看详情,使用make VERBOSE=1

默认使用gcc,如果想要使用clang,需要指定 cmake 参数-DCMAKE_C_COMPILER=clang

CMake 相关宏

CMAKE_BUILD_TYPE

你可以通过CMAKE_BUILD_TYPE指定编译类型,例如 -DCMAKE_BUILD_TYPE=Debug(Release,Debug,RelWithDebInfo,MinSizeRel),一个例子:

$ cmake -DCMAKE_BUILD_TYPE=Debug ..

默认编译类型为 Debug

CONFIG_BUILD_PIE_EXE

编译ULPatch可执行文件为PIE(Position-Independent-Executable),可以执行:

$ cmake -DCONFIG_BUILD_PIE_EXE=1 ..

这个参数对编译PIE文件很有帮助。

CONFIG_BUILD_TESTING

通过指定 CONFIG_BUILD_TESTING 来决定是否编译测试程序 ulpatch_test,默认开启 ON。如果你想要关闭,可以:

$ cmake -DCONFIG_BUILD_TESTING=0 ..

CONFIG_BUILD_ULFTRACE

通过指定 CONFIG_BUILD_ULFTRACE 来决定是否编译 ulftrace,默认开启 ON。如果你想要关闭,可以:

$ cmake -DCONFIG_BUILD_ULFTRACE=0 ..

CONFIG_BUILD_ULTASK

通过指定 CONFIG_BUILD_ULTASK 来决定是否编译进程修改器ultask,默认关闭 ON。如果你想要关闭,可以:

$ cmake -DCONFIG_BUILD_ULTASK=0 ..

CONFIG_BUILD_MAN

通过指定 CONFIG_BUILD_MAN 来决定是否编译相关手册,默认开启 ON。如果你想要关闭,可以:

$ cmake -DCONFIG_BUILD_MAN=0 ..

CONFIG_BUILD_BASH_COMPLETIONS

通过指定 CONFIG_BUILD_BASH_COMPLETIONS 来决定是否安装bash补全功能,默认开启 ON。如果你想要关闭,可以:

$ cmake -DCONFIG_BUILD_BASH_COMPLETIONS=0 ..

CONFIG_CAPSTONE

CMake CONFIG_CAPSTONE选项决定是否支持capstone,默认开启 ON。如果你想要关闭,可以:

$ cmake -DCONFIG_CAPSTONE=OFF ..
如果 CONFIG_CAPSTONE=ON(默认),并且你的系统没有安装libunwindcmake将报错。

CONFIG_LIBUNWIND

CMake CONFIG_LIBUNWIND选项决定是否支持libunwind,默认开启 ON。如果你想要关闭,可以:

$ cmake -DCONFIG_CAPSTONE=OFF ..

如果 CONFIG_LIBUNWIND=ON(默认),并且你的系统没有安装libunwindcmake将报错。

安装 ULPatch

$ sudo make install

卸载 ULPatch

$ sudo make uninstall

从 RPM 安装

直接下载

可以在 发布记录 下载。

安装

然后,使用 rpm 或者 dnf 命令安装 RPM 包。

$ sudo dnf install ulpatch-*.rpm

使用‘localinstall’可能更好(dnf <= 4,dnf5 不再支持 “localinstall”)。

或者:

$ sudo rpm -ivh ulpatch-*.rpm

如果升级:

$ sudo rpm -iUh ulpatch-*.rpm

构建 RPM 包

ULPatch 当前只支持构建 RPM 包,你可以在 Fedora、RHEL 这些系统上构建。

你需要安装rpm-build 软件包:

$ sudo dnf install rpm-build

然后,安装 ULPatch 构建所需要的依赖:

# Or sudo dnf install -y dnf-plugins-core
$ sudo dnf install -y 'dnf-command(builddep)'
$ sudo dnf builddep -y ulpatch.spec

现在,你可以通过rpmbuild构建RPM包了。在ULPatch代码仓库的根目录下,我已经封装了rpmbuild.sh命令。当然,你需要先打包源代码。生成 tar 包:

$ ./archive.sh

构建 RPM 包:

$ ./rpmbuild.sh