Arm平台Nmap7.8交叉编译

前提:gcc-linaro-5.3.1-2016.05-i686_aarch64-linux-gnu编译链配置完成,CFLAGS、LDFLAGS等关键环境变量已经导入/etc/profile,如下图

1628413676917

  • 上面的库和头文件来自arm公版CentOS7,即直接从公版CentOS7中提取库和头文件放到对应的目录下
    我使用的版本如下:
    Linux localhost.localdomain 4.18.0-193.28.1.el7.aarch64 #1 SMP Wed Oct 21 16:25:35 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux

0x01 查看configure编译需求

我们需要用到的编译选项

1
2
3
4
5
6
7
--prefix # 指定nmap安装位置
--host # 指定编译链
--with-includes # 指定头文件的搜索目录
--without-zenmap # 关闭zenmap编译
--with-openssl # 链接openssl库
--with-libpcap # 链接libpcap库,用于发包等网络操作
--with-pcre # 链接libpcre库,用于正则处理

arm版本gcc的编译选项

对照arm环境中的共享对象,我们找到交叉编译环境下的相同共享对象,指定对应的依赖路径,保证无误

  • libpcre.so.1.2.6
  • libpcap.so.0.8
1
./configure --prefix=/nmap --host=aarch64-linux-gnu --with-includes=/home/project/cross_compile_arm/include --with-libssl-prefix=/home/project/cross_compile_arm/lib64 --with-libpcap=/home/project/cross_compile_arm/

0x02 报错处理

按照上述configure选项,我们生成了对应的makefile,最下面的warning能判断,我们没有将openssl和libssh2加入(用不到就不加)

1628502306278

执行make,开始编译报如下错误

1
2
3
4
5
6
7
8
9
10
11
make[2]: Entering directory `/root/nmap-7.80/nping'
aarch64-linux-gnu-g++ -c -I../libdnet-stripped/include -I/home/project/cross_compile_arm/lib/include -I../nbase -I../nsock/include -g -O2 -Wall -fno-strict-aliasing -DHAVE_CONFIG_H -DNPING_NAME=\"Nping\" -DNPING_URL=\"https://nmap.org/nping\" -DNPING_PLATFORM=\"aarch64-unknown-linux-gnu\" -D_FORTIFY_SOURCE=2 ArgParser.cc -o ArgParser.o
In file included from nping.h:145:0,
from ArgParser.cc:134:
../libnetutil/netutil.h:142:18: fatal error: pcap.h: No such file or directory
compilation terminated.
make[2]: *** [ArgParser.o] Error 1
make[2]: Leaving directory `/root/nmap-7.80/nping'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/root/nmap-7.80/nping'
make: *** [build-nping] Error 2

发现是路径指定出错,configure生成的makefile会找到我们给出路径的include目录,下面给出修改

1
./configure --prefix=/nmap --host=aarch64-linux-gnu --with-includes=/home/project/cross_compile_arm/ --with-libssl-prefix=/home/project/cross_compile_arm/ --with-libpcap=/home/project/cross_compile_arm/

继续make,成功编译

0x03 最终参数

最终我们的编译选项

1
2
3
./configure --prefix=/nmap --host=aarch64-linux-gnu --with-includes=/home/project/cross_compile_arm/ --with-libssl-prefix=/home/project/cross_compile_arm/ --with-libpcap=/home/project/cross_compile_arm/

make && make install

1628935167120

成功编译安装


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!