Dockfile 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 FROM ubuntu:14.04 ARG DEBIAN_FRONTEND=noninteractiveRUN apt-get update && apt-get install -y \ build-essential \ mono-complete \ g++-multilib \ python2.7 \ gcc-4.8 \ g++-4.8 \ gcc-4.8 -multilib \ g++-4.8 -multilib \ libpng-dev \ wget \ git \ && ln -s /usr/bin/python2.7 /usr/bin/python \ && update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100 \ && update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 100 \ && rm -rf /var/lib/apt/lists/* WORKDIR /peach COPY ./peachfuzz-code/ . WORKDIR /peach/3rdParty/pin COPY ./pin-3.19-98425-gd666b2bee-gcc-linux.tar.gz . RUN tar -xzf pin-3.19-98425-gd666b2bee-gcc-linux.tar.gz \ && mv pin-2.13-61206-gcc.4.4.7-linux/ pin-2.13-61206-gcc.4.4.7-linux-back/ && mv pin-3.19-98425-gd666b2bee-gcc-linux/ pin-2.13-61206-gcc.4.4.7-linux/ RUN chmod +x ./waf && \ ./waf configure && \ ./waf build && \ ./waf install WORKDIR /peach/output CMD ["/bin/bash" ]
使用 Ubuntu 14.04 作为基础镜像 编译peach3.x版本,版本比较老,需要用到比较老的mono版本,Ubuntu 14相应的mono为3.x版本,可以编译通过。
Ubuntu
14.04.1
16.04.1
18.04.1
linux
3.13.0
4.4.0
4.15.0
mono
3.2.8
4.2.1.102
4.6.2.7
安装基础依赖和Python 2 主要注意gcc、python版本也要低,python2执行waf
自己安装mono 下载源码 https://origin-download.mono-project.com/sources/mono/
1 2 3 4 5 6 7 8 9 apt-get install bison apt-get install gettext tar jvxf mono-xxx.tar.bz2 cd /mono-xxx ./configure --prefix=/usr make make install
自己安装mono 之在ubuntu 22.04实战 1 2 3 4 5 6 7 wget https://download.mono-project.com/sources/mono/mono-4.8.0.520.tar.bz2 tar -xvjf mono-4.8.0.520.tar.bz2 cd mono-4.8.0.520./configure --prefix=/opt/mono-4.8 make -j$(nproc) make install
1 /opt/mono-4.8/bin/mono --version
glibc 2.25+ 之后,把 makedev() 从 <sys/types.h> 移到了 <sys/sysmacros.h>,而 Mono 4.8 的代码还写的是老版本方式,导致找不到。直接在 processes.c 顶部加一句:
打开 mono/io-layer/processes.c
1 #include <sys/sysmacros.h>
就能解决。
还可能缺少 libgdiplus 这个动态库
1 apt-get install -y libgdiplus
1 export PATH=/opt/mono-4.8/bin:$PATH
WORKDIR 命令 WORKDIR命令指定工作目录,可对后续代码产生影响。
而RUN命令只对当前命令有效,cd只影响当前命令,命令执行完,下一个RUN会回到workdir工作目录
COPY 命令 在 COPY 指令中,./XXX/ 末尾的 / 表示复制XXX目录下的所有内容,而不是整个目录。
去掉末尾的/,则连着文件名也复制过来
Pin文件 下载的Peach3.1.124源码中,/3rdParty/pin下的包编译时会出错,好像是损坏了。
直接网上下载了个pin3.x的过去顶上,结果编译也成功了
https://software.intel.com/sites/landingpage/pintool/downloads/pin-3.19-98425-gd666b2bee-gcc-linux.tar.gz
总结 最终在mono3.x+pin3.x+gcc4.x+peach3.x+ubuntu14这个环境下编译成功了!!
tips 编译环境较老,待测协议却又不一定能跑起来?
可以编译好之后,复制出bin目录文件到Ubuntu18等环境中去适配测试协议!!