Binutils

为了支持一些不常见的架构的汇编指令(例如: 在 Mac OS X 操作系统上汇编 Sparc 的 Shellcode) 需要首先安装交叉编译的 binutils 我们已经尽我们最大的努力使这个更加丝滑

在下面的例子中, 请替换 $ARCH 为你所需要的目标架构 (例如: arm, mips64, vax, 等等)

如果你有一个八核的现代 CPU , 那么从源码构建 binutils 大约需要 60 秒钟

Ubuntu

如果你的操作系统是 Ubuntu 12.04 到 15.10 之间, 那么你需要首先添加 pwntools 的软件源 Personal Package Archive repository.

Ubuntu Xenial (16.04) 有许多官方的软件包来支持大多数架构, 因此不需要再额外做什么

$ apt-get install software-properties-common
$ apt-add-repository ppa:pwntools/binutils
$ apt-get update

然后, 为你的目标架构安装 binutils

$ apt-get install binutils-$ARCH-linux-gnu

Mac OS X

Mac OS X 安装比较容易, 但是也需要从源码编译 binutils 但是, 我们已经做好了 homebrew 的软件包以便于可以通过一条命令完成构建 After installing brew, grab the appropriate 在安装完成 brew 之后, 就可以开始正式安装 binutils 了 binutils repo.

$ brew install https://raw.githubusercontent.com/Gallopsled/pwntools-binutils/master/osx/binutils-$ARCH.rb

Alternate OSes

如果你想一步一步手动从源码编译所有的工作, 手动构建 binutils 也很简单

#!/usr/bin/env bash

V=2.25   # Binutils Version
ARCH=arm # Target architecture

cd /tmp
wget -nc https://ftp.gnu.org/gnu/binutils/binutils-$V.tar.gz
wget -nc https://ftp.gnu.org/gnu/binutils/binutils-$V.tar.gz.sig

gpg --keyserver keys.gnupg.net --recv-keys 4AE55E93
gpg --verify binutils-$V.tar.gz.sig

tar xf binutils-$V.tar.gz

mkdir binutils-build
cd binutils-build

export AR=ar
export AS=as

../binutils-$V/configure \
    --prefix=/usr/local \
    --target=$ARCH-unknown-linux-gnu \
    --disable-static \
    --disable-multilib \
    --disable-werror \
    --disable-nls

MAKE=gmake
hash gmake || MAKE=make

$MAKE -j clean all
sudo $MAKE install