OpenHarmony(Linux 内核)上成功使用 Seccomp-BPF

Posted by HX on 2023-10-22 | 👓

记录一下,成功在 OpenHarmony 上编译跑通了基于 Seccomp-BPF 的系统调用追踪程序。

Seccomp-BPF 在 OpenHarmony 的运行效果

Seccomp-BPF 在 OpenHarmony 的运行效果

虽然并没什么好意外的,毕竟也是 Linux 内核…… 不过这份代码从安卓移植过来十分顺利,几乎只需要把 android/log.hjni.h 删掉就行,当然也有代码本身就比较简单的原因吧。代码因为和公司有些关系,就不放了。

再简单写一下 Windows 上编译 OpenHarmony C/C++ native 程序的过程。开始之前,先保证装好 DevEco Studio IDE,然后下载安装 OpenHarmony SDK(包含 NDK)并设置好环境变量,主要是将 SDK 根目录、NDK 根目录和下面的 build-tools/cmake/bin 加入 PATH 变量。

首先,组织好源代码的目录结构,参考官方仓库的例子。例如,如果要编译一个 C++ 可执行程序(而非链接库),参考里面的 cpphello;如果要编译动态链接库(.so),参考 shared_library

其次,编写源代码。

再次,编写/修改 CMakeLists.txt 文件,主要是指定要参与编译的源文件和链接方式,参考离北况归大佬的文章

最后,在项目根目录下创建 compile.bat,内容如下,保存运行(%OHOS_NDK_HOME% 是 NDK 根目录,OHOS_STL 设为 c++_static 表示静态链接 libc++.so):

1
2
3
4
5
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=%OHOS_NDK_HOME%/build/cmake/ohos.toolchain.cmake -DCMAKE_MAKE_PROGRAM=%OHOS_NDK_HOME%/build-tools/cmake/bin/ninja.exe -DOHOS_STL=c++_static .. -G Ninja
cmake --build .
cd ..

产物在 build\output 中。