Frida 源码编译全流程:自己动手编译 frida-server

作者:CYRUS_STUDIO日期:2026/4/15

版权归作者所有,如有转发,请注明文章出处:cyrus-studio.github.io/blog/

下载 Frida 源码

Frida 源码:github.com/frida/frida

官方文档:frida.re/docs/buildi…

下载源码

1git clone https://github.com/frida/frida.git
2

安装相关依赖:

1sudo apt-get install build-essential git lib32stdc++-9-dev \
2    libc6-dev-i386 nodejs npm
3

安装 Python

1sudo apt install -y python3-dev python3-setuptools python3-wheel python3-pip
2

安装 Node.js

nvm 是一个 Node.js 版本管理器,在同一台机器上管理多个 Node.js 版本,并随时切换。

1curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
2
3source ~/.bashrc
4
5nvm install 18
6nvm use 18
7

安装任意版本 Node.js

1nvm install 18
2nvm install 20
3

一键切换

1nvm use 18
2

实现项目隔离,你可以:

1nvm use 18   # 编译 Frida
2nvm use 16   # 其他项目
3

验证:

1node -v
2

安装 NDK

下载并解压 ndk

1mkdir ndk
2cd ndk
3
4wget https://dl.google.com/android/repository/android-ndk-r29-linux.zip
5unzip android-ndk-r29-linux.zip
6

配置 ANDROID_NDK_ROOT

1export ANDROID_NDK_ROOT=~/ndk/android-ndk-r29
2

编译 Frida

设置目标运行平台(host)是 Android ARM64(aarch64)

1$ ./configure --host=android-arm64
2The Meson build system
3Version: 1.4.99
4Source dir: /mnt/case_sensitive/frida
5Build dir: /mnt/case_sensitive/frida/build
6Build type: cross build
7Project name: frida
8Project version: 17.8.3
9C compiler for the host machine: /mnt/case_sensitive/ndk/android-ndk-r29/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -target aarch64-none-linux-android21 (clang 21.0.0 "Android (13989888, +pgo, +bolt, +lto, +mlgo, based on r563880c) clang version 21.0.0 (https://android.googlesource.com/toolchain/llvm-project 5e96669f06077099aa41290cdb4c5e6fa0f59349)")
10C linker for the host machine: /mnt/case_sensitive/ndk/android-ndk-r29/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -target aarch64-none-linux-android21 ld.lld 21.0.0
11C compiler for the build machine: /usr/bin/cc (gcc 11.4.0 "cc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0")
12C linker for the build machine: /usr/bin/cc ld.bfd 2.38
13Build machine cpu family: x86_64
14Build machine cpu: x86_64
15Host machine cpu family: aarch64
16Host machine cpu: aarch64
17Target machine cpu family: aarch64
18Target machine cpu: aarch64
19Program python3 found: YES (/usr/bin/python3)
20...
21

开始编译

1make
2

解决编译报错

fatal error: pyconfig.h: No such file or directory

编译器找不到:pyconfig.h

1[347/349] Compiling C object subprojects/frida-python/frida/_frida/_frida.abi3.so.p/extension.c.o
2FAILED: subprojects/frida-python/frida/_frida/_frida.abi3.so.p/extension.c.o
3/usr/bin/cc -Isubprojects/frida-python/frida/_frida/_frida.abi3.so.p -Isubprojects/frida-python/frida/_frida -I../subprojects/frida-python/frida/_frida -Isubprojects/frida-core/src/api -I../subprojects/frida-core/src/api -Isubprojects/frida-gum -I../subprojects/frida-gum -Isubprojects/frida-gum/gum -I../subprojects/frida-gum/gum -I../subprojects/frida-gum/gum/arch-x86 -I../subprojects/frida-gum/gum/arch-arm -I../subprojects/frida-gum/gum/arch-arm64 -I../subprojects/frida-gum/gum/arch-mips -Isubprojects/frida-gum/libs -I../subprojects/frida-gum/libs -Isubprojects/frida-gum/libs/gum/heap -I../subprojects/frida-gum/libs/gum/heap -Isubprojects/frida-gum/libs/gum/prof -I../subprojects/frida-gum/libs/gum/prof -I../subprojects/frida-gum/gum/backend-linux/include -I../subprojects/frida-gum/gum/backend-elf -I../subprojects/frida-gum/gum/backend-libunwind/include -Isubprojects/frida-gum/bindings -I../subprojects/frida-gum/bindings -I/usr/lib/include/python3.10 -I/usr/lib/include/x86_64-linux-gnu/python3.10 -I/mnt/case_sensitive/frida/deps/sdk-linux-x86_64/include/glib-2.0 -I/mnt/case_sensitive/frida/deps/sdk-linux-x86_64/lib/glib-2.0/include -I/mnt/case_sensitive/frida/deps/sdk-linux-x86_64/include -I/mnt/case_sensitive/frida/deps/sdk-linux-x86_64/include/gee-0.8 -I/mnt/case_sensitive/frida/deps/sdk-linux-x86_64/include/json-glib-1.0 -I/mnt/case_sensitive/frida/deps/sdk-linux-x86_64/include/capstone -I/mnt/case_sensitive/frida/deps/sdk-linux-x86_64/include/libsoup-3.0 -I/mnt/case_sensitive/frida/deps/sdk-linux-x86_64/include/gio-unix-2.0 -I/mnt/case_sensitive/frida/deps/sdk-linux-x86_64/include/libusb-1.0 -I/mnt/case_sensitive/frida/deps/sdk-linux-x86_64/include/quickjs -I/mnt/case_sensitive/frida/deps/sdk-linux-x86_64/include/nice -fvisibility=hidden -fdiagnostics-color=always -DNDEBUG -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Os -g -ffunction-sections -fdata-sections -fPIC -pthread -DNGTCP2_STATICLIB -DNGHTTP2_STATICLIB -DGUM_STATIC -DFFI_STATIC_BUILD -DG_DISABLE_ASSERT -DG_DISABLE_CHECKS -DG_DISABLE_CAST_CHECKS -DPy_LIMITED_API=0x03070000 -MD -MQ subprojects/frida-python/frida/_frida/_frida.abi3.so.p/extension.c.o -MF subprojects/frida-python/frida/_frida/_frida.abi3.so.p/extension.c.o.d -o subprojects/frida-python/frida/_frida/_frida.abi3.so.p/extension.c.o -c ../subprojects/frida-python/frida/_frida/extension.c
4../subprojects/frida-python/frida/_frida/extension.c:33:11: fatal error: pyconfig.h: No such file or directory
5   33 | # include <pyconfig.h>
6      |           ^~~~~~~~~~~~
7compilation terminated.
8[348/349] Generating subprojects/frida-core/src/api/frida-core-library with a custom command
9ninja: build stopped: subcommand failed.
10Command '['/usr/bin/python3', '/mnt/case_sensitive/frida/releng/meson/meson.py', 'compile']' returned non-zero exit status 1.
11make: *** [Makefile:4: all] Error 1
12

解决方案:

1# 创建目录
2sudo mkdir /usr/lib/include/
3
4# 创建一个软链接(symbolic link)
5sudo ln -s /usr/include/python3.10/ /usr/lib/include/
6

参考:github.com/frida/frida…

当访问 /usr/include/python3.10 时,实际访问 /usr/lib/include/python3.10

1/mnt/case_sensitive/frida$ find /usr/ -name pyconfig.h
2/usr/include/x86_64-linux-gnu/python3.10/pyconfig.h
3/usr/include/python3.10/pyconfig.h
4

清理并重编译

1rm -rf build
2make
3

查看指定目录的软链接:

1$ ls -l /usr/lib/include
2total 0
3lrwxrwxrwx 1 root root 24 Mar 27 13:25 python3.10 -> /usr/include/python3.10/
4

有 -> 才是软链接

如果想删除软链接:

1sudo rm /usr/lib/include/python3.10
2

只删除:/usr/lib/include/python3.10 (link),不会删除:/usr/include/python3.10 (真实目录)

EOFError: Compressed file ended before the end-of-stream marker was reached

tar.xz 没下载完整 / 被截断 / 缓存坏了

1$ make
2INFO: autodetecting backend as ninja
3INFO: calculating backend command to run: /mnt/case_sensitive/frida/deps/toolchain-linux-x86_64/bin/ninja
4[265/309] Generating subprojects/frida-core/lib/gadget/frida-gadget with a custom command
5[266/309] Generating subprojects/frida-core/compat/arch-support with a custom command
6FAILED: subprojects/frida-core/compat/arch-support.bundle subprojects/frida-core/compat/frida-helper subprojects/frida-core/compat/frida-agent.so subprojects/frida-core/compat/frida-gadget.so
7/usr/bin/python3 ../subprojects/frida-core/compat/build.py compile subprojects/frida-core/compat/arch-support.bundle.p gASVKQMAAAAAAACMCF9fbWFpbl9flIwFU3RhdGWUk5QpgZR9lCiMBHJvbGWUjApzdWJwcm9qZWN0lIwIYnVpbGRkaXKUjAdwYXRobGlilIwJUG9zaXhQYXRolJOUKIwBL5SMA21udJSMDmNhc2Vfc2Vuc2l0aXZllIwFZnJpZGGUjAVidWlsZJSMC3N1YnByb2plY3RzlIwKZnJpZGEtY29yZZSMBmNvbXBhdJR0lFKUjAx0b3BfYnVpbGRkaXKUaAooaAtoDGgNaA5oD3SUUpSMDWZyaWRhX3ZlcnNpb26UjAYxNy44LjOUjAdob3N0X29zlIwHYW5kcm9pZJSMC2hvc3RfY29uZmlnlE6MEWFsbG93ZWRfcHJlYnVpbGRzlI+UKIwJdG9vbGNoYWlulIwIc2RrOmhvc3SUjAlzZGs6YnVpbGSUkIwHb3V0cHV0c5SMC2NvbGxlY3Rpb25zlIwLT3JkZXJlZERpY3SUk5QpUpQoaACMC091dHB1dEdyb3VwlJOUKYGUfZQojARhcmNolE6MB3RyaXBsZXSUTowNZXh0cmFfZW52aXJvbpR9lHViXZRoAIwGT3V0cHV0lJOUKYGUfZQojAppZGVudGlmaWVylIwTYXJjaF9zdXBwb3J0X2J1bmRsZZSMBG5hbWWUjBNhcmNoLXN1cHBvcnQuYnVuZGxllIwEZmlsZZRoCmgShZRSlIwGdGFyZ2V0lIwAlHViYWgoKYGUfZQoaCuMA2FybZRoLE5oLX2UdWJdlChoMSmBlH2UKGg0jA1oZWxwZXJfbGVnYWN5lGg2jAxmcmlkYS1oZWxwZXKUaDhoCowDc3JjlGhFhpRSlGg7aEV1YmgxKYGUfZQoaDSMDGFnZW50X2xlZ2FjeZRoNowOZnJpZGEtYWdlbnQuc2+UaDhoCowDbGlilIwFYWdlbnSUaEyHlFKUaDuMC2ZyaWRhLWFnZW50lHViaDEpgZR9lChoNIwNZ2FkZ2V0X2xlZ2FjeZRoNowPZnJpZGEtZ2FkZ2V0LnNvlGg4aApoTYwGZ2FkZ2V0lGhVh5RSlGg7jAxmcmlkYS1nYWRnZXSUdWJldXViLg==
8Traceback (most recent call last):
9  File "/mnt/case_sensitive/frida/build/../subprojects/frida-core/compat/build.py", line 680, in <module>
10    main(sys.argv)
11  File "/mnt/case_sensitive/frida/build/../subprojects/frida-core/compat/build.py", line 66, in main
12    args.func(args)
13  File "/mnt/case_sensitive/frida/build/../subprojects/frida-core/compat/build.py", line 61, in <lambda>
14    command.set_defaults(func=lambda args: compile(args.privdir, pickle.loads(base64.b64decode(args.state))))
15  File "/mnt/case_sensitive/frida/build/../subprojects/frida-core/compat/build.py", line 443, in compile
16    configure(sourcedir=REPO_ROOT,
17  File "/mnt/case_sensitive/frida/releng/meson_configure.py", line 199, in configure
18    host_sdk_prefix, _ = deps.ensure_sdk(host_machine, deps_dir, on_progress=on_progress)
19  File "/mnt/case_sensitive/frida/releng/deps.py", line 142, in ensure_sdk
20    state = sync(Bundle.SDK, machine, sdk_prefix, version, on_progress)
21  File "/mnt/case_sensitive/frida/releng/deps.py", line 208, in sync
22    tar.extractall(staging_dir)
23  File "/usr/lib/python3.10/tarfile.py", line 2289, in extractall
24    self._extract_one(tarinfo, path, set_attrs=not tarinfo.isdir(),
25  File "/usr/lib/python3.10/tarfile.py", line 2352, in _extract_one
26    self._extract_member(tarinfo, os.path.join(path, tarinfo.name),
27  File "/usr/lib/python3.10/tarfile.py", line 2435, in _extract_member
28    self.makefile(tarinfo, targetpath)
29  File "/usr/lib/python3.10/tarfile.py", line 2488, in makefile
30    copyfileobj(source, target, tarinfo.size, ReadError, bufsize)
31  File "/usr/lib/python3.10/tarfile.py", line 252, in copyfileobj
32    buf = src.read(bufsize)
33  File "/usr/lib/python3.10/lzma.py", line 200, in read
34    return self._buffer.read(size)
35  File "/usr/lib/python3.10/_compression.py", line 68, in readinto
36    data = self.read(len(byte_view))
37  File "/usr/lib/python3.10/_compression.py", line 99, in read
38    raise EOFError("Compressed file ended before the "
39EOFError: Compressed file ended before the end-of-stream marker was reached
40ninja: build stopped: subcommand failed.
41Command '['/usr/bin/python3', '/mnt/case_sensitive/frida/releng/meson/meson.py', 'compile']' returned non-zero exit status 1.
42make: *** [Makefile:4: all] Error 1
43

解决方案:

1# 删除损坏的 SDK
2rm -rf deps/sdk-android-arm64
3
4# 删除 build
5rm -rf build/
6
7# 重新下载
8./configure --host=android-arm64
9

但一直卡在 Downloading SDK ...

1$ ./configure --host=android-arm64
2Downloading SDK 20260311 for android-arm64...
3

Frida 的 SDK 实际来自:

1https://build.frida.re/deps/
2

当前日志:

1Downloading SDK 20260311 for android-arm64
2

对应文件是:

1sdk-android-arm64.tar.xz
2

下载地址是:

1https://build.frida.re/deps/20260311/sdk-android-arm64.tar.xz
2

sdk下载链接生成规则就在 releng/deps.py 中

1$ grep -R "build.frida.re" -n releng/
2releng/deps.py:249:    s3_url = "s3://build.frida.re/deps/{version}/{filename}".format(version=version, filename=filename)
3releng/deps.py:1096:BUNDLE_URL = "https://build.frida.re/deps/{version}/{filename}"
4grep: releng/__pycache__/deps.cpython-310.pyc: binary file matches
5releng/post-process-oabi.py:12:ARM64E_URL = "https://build.frida.re/deps/{version}/sdk-ios-arm64e.tar.xz"
6

手动下载并解压 SDK 到 deps

1# 1. 进入 deps
2cd ./deps/
3
4# 2. 手动下载
5$ wget https://build.frida.re/deps/20260311/sdk-android-arm64.tar.xz
6
7# 3. 解压
8mkdir -p ./sdk-android-arm64 && tar -xf sdk-android-arm64.tar.xz -C ./sdk-android-arm64 --strip-components=1
9
10# 4. 返回
11cd ..
12
13# 5. 继续配置
14./configure --host=android-arm64
15

编译完成

编译完成 frida-server 生成在:

1frida\build\subprojects\frida-core\server\frida-server
2

word/media/image1.png

编译指定版本的 Frida

查看所有 Frida 版本

列出所有版本(tags)

1git tag
2

如果只看 Frida 主版本(过滤):

1git tag | grep ^16
2

或者按时间排序:

1git tag --sort=-creatordate
2

查看当前版本

1git describe --tags
2

或:

1git tag --points-at HEAD
2

编译指定版本

比如编译 frida 16.7.19

1# 切版本
2git checkout 16.7.19
3
4# 强制同步 submodule  tag 对应版本
5git submodule update --init --recursive --force
6
7# 确认子模块是否已经同步
8git submodule status
9
10# 清理旧构建
11rm -rf build
12
13# 配置(Android)
14./configure --host=android-arm64
15
16# 编译
17make
18

下载对应版本的 deps

1~/frida$ ./configure --host=android-arm64
2Downloading toolchain 20250512...
3Extracting toolchain...
4Downloading SDK 20250512 for linux-x86_64...
5Extracting SDK...
6Downloading SDK 20250512 for android-arm64...
7Extracting SDK...
8NDK r25 is required (found r29, which is unsupported)
9

不同版本对 NDK 版本要求也不一样

1# 下载对应版本的 NDK
2wget https://dl.google.com/android/repository/android-ndk-r25-linux.zip
3# 解压 NDK
4unzip android-ndk-r29-linux.zip
5
6# 修改 ANDROID_NDK_ROOT
7export ANDROID_NDK_ROOT=~/ndk/android-ndk-r25
8
9# 查看当前 ANDROID_NDK_ROOT
10echo $ANDROID_NDK_ROOT
11

Frida 源码编译全流程:自己动手编译 frida-server》 是转载文章,点击查看原文


相关推荐


用 3100 个数字造一台计算机
jump_jump2026/4/7

你有没有想过,一台计算机最少需要什么? 不是说你桌上那台——那个有几十亿个晶体管、跑着操作系统和浏览器的庞然大物。我说的是最本质的那个东西:能算数、能画画、能放音乐、能响应你的键盘和鼠标。 答案可能会让你意外:一个数组就够了。 Little Virtual Computer 是一台用 TypeScript 写的虚拟计算机,原作者是 jsdf。我在他的基础上做了不少重构和优化——把代码拆分成了清晰的模块结构,加了音频系统、断点调试、内存追踪、中英文切换等功能。3100 个内存槽位,23 条指令,你


别再被误导!try...catch性能大揭秘
小码哥_常2026/3/30

别再被误导!try...catch性能大揭秘 开头:抛出问题,引发好奇 家人们,最近我在代码审查的时候,被狠狠质疑了一把。我在代码里用了好些try...catch,结果就收到了这样的意见:“try...catch用太多会影响性能,得优化一下”。当时我就在想,try...catch真有这么大罪过吗?平常开发的时候,我们为了处理各种可能出现的异常,try...catch可没少用,它真的会严重影响性能吗 ?今天咱就来好好唠唠这个话题,一起把这层迷雾给拨开! 历史担忧:曾经的性能痛点 (一)早期 Jav


Claude Skills 新手笔记
言萧凡_CookieBoty2026/3/22

开篇:这份笔记能帮你解决什么问题 如果你正在用 Claude(或任何大模型)做写作、总结、审阅、编码、整理资料等重复性工作,你很快会遇到两个痛点: 同一类任务,每次都要把背景、规则、格式重新讲一遍; 输出质量容易波动:有时很稳,有时跑偏,难以复用。 Claude Skills 可以把“可重复任务的知识 + 流程 +资源”打包成可复用的能力单元,让模型在需要时按需加载,从而更稳定地完成特定工作。这篇文章会用最小规范、加载机制、以及一个完整的中文示例,带你快速建立可落地的理解。 1. Clau


破解企业安全软件网络拦截实战记录
来点vc2026/3/14

一、背景与现象 问题描述 个人电脑访问某技术网站时,被企业安全软件(零信任安全架构)拦截,提示: "您访问的站点或应用因不合规,企业安全软件 已自动拦截此次访问" 关键特征: 这是个人电脑,未连接公司 VPN,未访问公司内网 浏览器和系统设置中看不到任何代理配置 重启电脑后问题依然存在 二、排查与分析过程 第一阶段:DNS 层面排查 初始假设:DNS 被劫持到企业服务器 $ scutil --dns | grep nameserver nameserver[0] : 10.x.x.x


AI大模型小白手册|Embedding 与向量数据库
树獭非懒2026/3/5

前言 在人工智能快速发展的今天,大模型虽能理解并生成人类语言,却高度依赖外部工具来高效处理和检索海量信息。其中,Embedding(嵌入)  技术将文本、图像等复杂数据转化为计算机可计算的向量,而向量数据库则专门用于存储和快速检索这些高维向量,从而实现语义级别的相似性匹配。这两项技术共同构成了现代AI应用如智能问答、推荐系统和知识库检索的基石。 本手册专为AI初学者设计,旨在用通俗易懂的方式讲解Embedding的基本原理、主流模型特点、向量数据库的核心功能及典型使用场景,并通过简单示例帮助你快


【深度学习基础篇04】从回归到分类:图像分类与卷积神经网络入门
ppppppatrick2026/2/25

【深度学习基础篇】从回归到分类:图像分类与卷积神经网络入门 文章目录 【深度学习基础篇】从回归到分类:图像分类与卷积神经网络入门一、前情提要:从回归实战到分类任务的核心转变回归与分类的核心区别:输出逻辑的本质不同分类任务的输出解码:从“置信度”到“类别标签” 二、图像分类的前提:理解图像的张量表示1. 图像的核心维度:通道×高度×宽度(C×H×W)2. 批量图像的张量格式:N×C×H×W3. 全连接层处理图像的痛点:维度爆炸 三、卷积的核心概念:从“局部感知”到特征提取1


丰田正在使用 Flutter 开发游戏引擎 Fluorite
恋猫de小郭2026/2/17

近日,丰田汽车旗下子公司丰田互联北美公司宣布,即将开源基于 Flutter 的自主研发的游戏引擎 Flourite ,而实际上在此之前,Flutter 已经是丰田车机的开发 SDK 之一。 Toyota Connected North America,TCNA,是丰田的北美子公司,专注于车载软件、AI 等。 Fluorite 是首款完全集成 Flutter 的主机级(console-grade)游戏引擎,主要针对车载数字座舱(digital cockpit)和嵌入式低端硬件设计,已在 202


用 Python 30 分钟做出自己的记事本
忘忧记2026/2/8

🌟 《零基础手把手:用 Python 30 分钟做出自己的记事本》 —— 不是照抄代码,而是理解每行代码的「灵魂」 🧩 第一步:为什么我们需要「基础窗口」?(新手必懂!) ❌ 常见错误:直接写 window.show() 但窗口不显示? ✅ 正确逻辑:程序运行流程图 #mermaid-svg-OKGSEAHaVwdJVXr3{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyf


type-challenges(ts类型体操): 10 - 元组转合集
fxss2026/1/30

10 - 元组转合集 by Anthony Fu (@antfu) #中等 #infer #tuple #union 题目 实现泛型TupleToUnion<T>,它返回元组所有值的合集。 例如 type Arr = ['1', '2', '3'] type Test = TupleToUnion<Arr> // expected to be '1' | '2' | '3' 在 Github 上查看:tsch.js.org/10/zh-CN 代码 /* _____________ 你的代


LeetCode 377 组合总和 Ⅳ
展菲2026/1/21

文章目录 摘要描述题解答案题解代码分析1. 动态规划的基本思路2. 初始状态3. 状态转移方程4. 为什么这样能计算出排列个数?5. 与组合问题的区别6. 优化:避免不必要的计算 示例测试及结果示例 1:nums = [1,2,3], target = 4示例 2:nums = [9], target = 3示例 3:nums = [1,2], target = 3示例 4:nums = [1], target = 1 时间复杂度空间复杂度进阶问题:如果数组中含有负数问题分析解决方

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 XYZ博客