When you want to build and experiment with x86 (32-bit) based binaries on an x64 based linux kernel. This is often useful for reverse engineering and exploit proof of concepts, as x86 offers a number of simplicities over x64.
On Kali (or I assume anything else debian based) add overall subsystem support with:
dpkg --add-architecture i386
Then to get a working development environment:
apt update
apt install libc-dev-i386-cross gdb-multiarch execstack gdb-peda lib32tinfo6 lib32ncurses6 lib32ncurses-dev gcc-7
You should be good to start compiling for an x86 target. Make sure to add -m32
to any CFLAGS
and LDFLAGS
parameters in the Makefile
.
For example, to get a 32-bit build of ImageMagick, use the configure
script with CFLAGS
options to:
- add debug symbols with
ggdb
- x86 with
m32
- level 0 optimisations with
O0
Like so:
./configure CXXFLAGS="-ggdb -m32 -O0" CFLAGS="-ggdb -m32 -fno-pie -O0"
make -j 4
Wait a few minutes for the new build to finish, and verify it worked.
root@kali:~/Downloads/ImageMagick-6.9.2-10/utilities/.libs# ./convert --version
Version: ImageMagick 6.9.2-10 Q16 x86_64 2019-09-28 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2016 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC OpenMP
Delegates (built-in):