在 Maemo 6 (Harmattan) N9/N950 上编译安装 radare2 的完整指南
【免费下载链接】radare2UNIX-like reverse engineering framework and command-line toolset项目地址: https://gitcode.com/gh_mirrors/ra/radare2
导读
本文基于 doc/maemo.md 整理,完整讲解如何在 Nokia N9 / N950(搭载 Maemo 6 "Harmattan" 系统,基于 MeeGo API)上从源码编译、打包并安装 radare2 逆向工程框架。Harmattan 是面向 ARM 处理器的移动 Linux 平台,无法直接使用桌面发行版的预编译包,需要通过 Nokia QtSDK 自带的 mad(Maemo Application Development)交叉编译环境构建。读完本文,你将掌握:mad 环境初始化、面向 ARM 目标的 configure 参数组合、radare2 打包工具链(dist/maemo)以及基于dpkg的安装流程。
背景:为什么需要交叉编译
Nokia N9 / N950 运行 Maemo 6 "Harmattan",其系统基于 MeeGo API,目标平台是 ARM 架构的小端处理器。radare2 的常规构建流程(./configure && make && make install)默认面向宿主机架构,无法直接在 ARM 设备上产出可执行文件,因此必须借助 Nokia QtSDK 中集成的mad(Maemo Application Development)工具链,在桌面 Linux 上交叉编译出 ARM 二进制,再打包成.deb交给设备安装。
仓库中与这一过程直接对应的基础设施包括:
- mk/mad.mk:mad 交叉编译工具链的构建规则(
CC=mad gcc、OSTYPE=gnulinux等); - mk/mad-harmattan.mk:针对 Harmattan 目标的专用构建规则;
- dist/maemo/Makefile 与 dist/maemo/deb_hand.mak:不依赖 dpkg 工具手工制作
.deb的打包脚本。
步骤一:安装 QtSDK
首先安装 Nokia QtSDK(Nokia Qt SDK),其下载地址与安装说明以官方发布为准。QtSDK 中捆绑了 Madde(Maemo/MeeGo Application Development)命令行工具,其中包含mad程序,是后续所有交叉编译操作的入口。
步骤二:配置 mad(Maemo 开发环境)
安装完 QtSDK 后,需要把mad命令软链接到系统 PATH 中,并切换到 Harmattan 的目标 API:
cd /usr/bin ; sudo ln -fs $HOME/QtSDK/Madde/bin/mad mad set harmattan-nokia-meego-api mad shln -fs将$HOME/QtSDK/Madde/bin/mad软链接到/usr/bin/mad(-f用于覆盖已存在的旧链接);mad set harmattan-nokia-meego-api选择目标平台配置:harmattan + Nokia MeeGo API,即 N9/N950 所用的 Maemo 6 系统接口;mad sh进入 mad 提供的 shell 环境,在该环境中gcc、ar、ranlib等工具都会被替换为 mad 的交叉编译包装器,从而为后续的 configure/make 提供正确的 ARM 工具链。
从 mk/mad.mk 可以看到 mad 工具链的具体形态——它把所有编译步骤都通过mad包装器执行:
CC=mad gcc RANLIB=mad ranlib ONELIB=0 CC_AR=mad ar qf ${LIBAR} PIC_CFLAGS=-fPIC OSTYPE=gnulinux LDFLAGS_LIB=-shared LDFLAGS_LIB+=-Wl,-soname,lib${NAME}.${EXT_SO}.${VERSION} LDFLAGS_SONAME=-Wl,-soname= CC_LIB=${CC} ${LDFLAGS_LIB} -o ${LIBSO}关键点解读:
CC=mad gcc、RANLIB=mad ranlib、CC_AR=mad ar:所有编译/归档动作都经由mad包装,由它注入 ARM 目标三元组与 sysroot;OSTYPE=gnulinux:将构建目标的操作系统类型固定为 GNU/Linux,这与后续 configure 的--with-ostype=gnulinux相互呼应;- 共享库通过
-Wl,-soname,lib${NAME}.${EXT_SO}.${VERSION}设置 SONAME,保证设备上动态链接的版本兼容; PIC_CFLAGS=-fPIC开启位置无关代码,这是构建共享库的常规要求。
而 mk/mad-harmattan.mk 则是针对 Harmattan 更精简的变体,同样以CC=mad gcc、OSTYPE=gnulinux为基调,并定义了CFLAGS_OPT0~OPT3与CFLAGS_DEBUG=-g等各档优化/调试选项,供 configure 按需选择。
步骤三:configure 与编译
在 mad shell 中,对 radare2 源码执行 configure 并编译:
./configure --prefix=/usr --with-little-endian \ --with-compiler=mad --with-ostype=gnulinux make各参数的作用(与当前仓库源码交叉印证):
--prefix=/usr:安装根目录设为/usr,使后续打包出的.deb能按系统标准布局安装(/usr/bin、/usr/lib、/usr/share);--with-little-endian:强制按小端字节序编译。Harmattan 设备的 ARM 处理器为小端架构,radare2 需要与目标设备字节序一致。字节序在 radare2 中是贯穿底层的关键概念,libr/include/r_types.h 中即有依据__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__的条件宏定义;--with-compiler=mad:选择编译工具链。该参数在 configure.acr 中定义为ARG_WITH USERCC=gcc compiler Define compiler to use (see mk/),即通过USERCC变量指定编译器;configure 生成 config-user.mk.acr 中的USERCC,再由COMPILER0=$(shell echo "${USERCC}" | awk '{print $$1}')与COMPILER=$(shell basename ${COMPILER0})解析出最终使用的编译器名。指定mad后,make 会加载mk/mad.mk或mk/mad-harmattan.mk,让整个构建过程统一走 mad 工具链;--with-ostype=gnulinux:指定操作系统类型。该参数在 configure.acr 中定义为ARG_WITH USEROSTYPE=auto ostype Choose OS ( android windows wsl mingw32 bsd solaris gnulinux darwin haiku ),合法值包括 android、windows、wsl、mingw32、bsd、solaris、gnulinux、darwin、haiku 等。这里选择gnulinux,与mk/mad.mk中OSTYPE=gnulinux保持一致,从而采用 GNU/Linux 的系统调用、链接与安装语义;make:并行调用 mad 工具链完成全部库与命令行工具的交叉编译。
configure 最终会将TARGET USERCC USEROSTYPE USE_CAPSTONE USE_LIB_MAGIC USE_SQSH等关键决策写入构建配置(见 configure.acr),供后续各库的 Makefile 读取。
步骤四:创建 .deb 软件包
编译完成后进入打包目录生成安装包:
cd maemo make当前仓库中对应的打包工程位于 dist/maemo,其中 dist/maemo/Makefile 是不使用 dpkg 工具、纯手工构造.deb的示例:
all: sudo rm -rf control data ${MAKE} clean ${MAKE} control ${MAKE} deb其核心流程:
data目录:通过fakeroot ${MAKE} install DESTDIR=$@ INSTALL_PROGRAM=cp将安装产物以data/为根目录布局暂存(即DESTDIR安装方式),随后chown -R 0:0统一属主;control目录:生成 Debian control 元数据,包括包名、版本、架构、依赖、维护者、描述等字段(见 dist/maemo/deb_hand.mak),并对data中每个文件计算md5sums校验清单;debian-binary:写入2.0标识 Debian 包格式版本;build归档:将control与data分别打包为control.tar.gz与data.tar.gz;deb组装:把debian-binary、control.tar.gz、data.tar.gz按 Debian 要求的顺序(ar归档内文件顺序很重要)用ar合并为${PACKAGE}_${VERSION}_${ARCH}.deb。
因此运行make后会得到类似radare2_<版本>_<架构>.deb的安装包文件。
步骤五:在设备上安装
将生成的.deb拷贝到 N9/N950 设备后,以 root 权限安装:
dpkg -i radare2-*.debdpkg -i会依据包内 control 信息将程序安装到/usr/bin等系统路径(与 configure 阶段--prefix=/usr对应),同时执行包内维护脚本(preinst/postinst 等,若有)。安装完成后即可在设备终端中直接调用r2或各r2*工具进行逆向分析。
小结与注意事项
- 环境顺序不可颠倒:必须先
mad set harmattan-nokia-meego-api再mad sh,否则工具链没有指向正确的 ARM sysroot; - configure 参数必须配套:
--with-compiler=mad与--with-ostype=gnulinux分别对应 mk/mad.mk 与 mk/mad-harmattan.mk 中定义的CC/OSTYPE,缺一不可;字节序参数需与设备端保持一致,否则运行时会出问题; - 打包阶段需要 fakeroot:
dist/maemo的打包流程依赖fakeroot伪造 root 权限生成data树,请确保桌面环境已安装该工具; - 依赖项:
dist/maemo/Makefile中以DEPENDS =预留了依赖声明(注释中提及 python 相关依赖),如需发布给他人安装,应根据实际引用的动态库补充 Depends 字段。
如果你维护的是较新的 radare2 版本,还可以参考 INSTALL.md 与 sys/install.sh 了解通用的安装流程,并以 dist/debian/deb_hand.mak 对照桌面 Debian 打包方式,理解移动端打包与桌面端打包的差异。
【免费下载链接】radare2UNIX-like reverse engineering framework and command-line toolset项目地址: https://gitcode.com/gh_mirrors/ra/radare2
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考