Binutils¶
Assembly of foreign architectures (e.g. assembling Sparc shellcode on
Mac OS X) requires cross-compiled versions of binutils
to be
installed. We’ve made this process as smooth as we can.
In these examples, replace $ARCH
with your target architecture (e.g., arm, mips64, vax, etc.).
Building binutils from source takes about 60 seconds on a modern 8-core machine.
Ubuntu¶
First, add our Personal Package Archive repository.
$ apt-get install software-properties-common
$ apt-add-repository ppa:pwntools/binutils
$ apt-get update
Then, install the binutils for your architecture.
$ apt-get install binutils-$ARCH-linux-gnu
Mac OS X¶
Mac OS X is just as easy, but requires building binutils from source.
However, we’ve made homebrew
recipes to make this a single command.
After installing brew, grab the appropriate
recipe from our binutils
repo.
$ brew install https://raw.githubusercontent.com/binjitsu/binjitsu-binutils/master/osx/binutils-$ARCH.rb
Alternate OSes¶
If you want to build everything by hand, or don’t use any of the above
OSes, binutils
is simple to build by hand.
#!/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