在 Maemo 6 (Harmattan) N9/N950 上编译安装 radare2 的完整指南
2026/9/20 22:33:52 网站建设 项目流程

在 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 gccOSTYPE=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 sh
  • ln -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 环境,在该环境中gccarranlib等工具都会被替换为 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 gccRANLIB=mad ranlibCC_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 gccOSTYPE=gnulinux为基调,并定义了CFLAGS_OPT0~OPT3CFLAGS_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.mkmk/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.mkOSTYPE=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

其核心流程:

  1. data目录:通过fakeroot ${MAKE} install DESTDIR=$@ INSTALL_PROGRAM=cp将安装产物以data/为根目录布局暂存(即DESTDIR安装方式),随后chown -R 0:0统一属主;
  2. control目录:生成 Debian control 元数据,包括包名、版本、架构、依赖、维护者、描述等字段(见 dist/maemo/deb_hand.mak),并对data中每个文件计算md5sums校验清单;
  3. debian-binary:写入2.0标识 Debian 包格式版本;
  4. build归档:将controldata分别打包为control.tar.gzdata.tar.gz
  5. deb组装:把debian-binarycontrol.tar.gzdata.tar.gz按 Debian 要求的顺序(ar归档内文件顺序很重要)用ar合并为${PACKAGE}_${VERSION}_${ARCH}.deb

因此运行make后会得到类似radare2_<版本>_<架构>.deb的安装包文件。

步骤五:在设备上安装

将生成的.deb拷贝到 N9/N950 设备后,以 root 权限安装:

dpkg -i radare2-*.deb

dpkg -i会依据包内 control 信息将程序安装到/usr/bin等系统路径(与 configure 阶段--prefix=/usr对应),同时执行包内维护脚本(preinst/postinst 等,若有)。安装完成后即可在设备终端中直接调用r2或各r2*工具进行逆向分析。

小结与注意事项

  1. 环境顺序不可颠倒:必须先mad set harmattan-nokia-meego-apimad sh,否则工具链没有指向正确的 ARM sysroot;
  2. configure 参数必须配套--with-compiler=mad--with-ostype=gnulinux分别对应 mk/mad.mk 与 mk/mad-harmattan.mk 中定义的CC/OSTYPE,缺一不可;字节序参数需与设备端保持一致,否则运行时会出问题;
  3. 打包阶段需要 fakerootdist/maemo的打包流程依赖fakeroot伪造 root 权限生成data树,请确保桌面环境已安装该工具;
  4. 依赖项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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询