====== Cross compile tools ====== Für das Reverse Engineering von embedded Linux Geräten sind oft statisch gelinkte Binaries von strace, gdb und busybox hilfreich. Statisch gelinkte Binaries funktionieren unabhängig von den Bibliotheken wie libc, die auf dem System installiert sind, sie müssen nur für die korrekte CPU Architektur übersetzt worden sein. ===== Toolchain ===== Wir benutzen zur Zeit die toolchains von https://musl.cc musl libc erlaubt es einfach komplett statisch gelinkte Binaries zu erstellen, mit der glibc ist dieses komplizierter. Bitte die toolchains mit -cross.tgz verwenden. ===== strace ===== git clone https://github.com/strace/strace.git cd strace/ Die toolchain in den Pfad aufnehmen. export PATH=$PATH:/home/hauke/wifi-cam/mipsel-linux-musl-cross/bin/ Jetzt kann strace gebaut werden. Die host variable muss dem toolchain Namen gleichen. Beim bauen muss -static zu den LDFLAGS hinzugefügt werden. ./bootstrap ./configure --host=mipsel-linux-musl make LDFLAGS=-static Die strace Applikation ist jetzt 3.8M groß, mit strip können unnötige Debugsymbole entfernt werden: /home/hauke/wifi-cam/mipsel-linux-musl-cross/bin/mipsel-linux-musl-strip strace ===== gdb ===== wget ftp://ftp.gnu.org/gnu/gdb/gdb-9.1.tar.xz tar xf gdb-9.1.tar.xz cd gdb-9.1/ mkdir build cd build/ Die toolchain in den Pfad aufnehmen. export PATH=$PATH:/home/hauke/wifi-cam/mipsel-linux-musl-cross/bin/ gdb hat einen Fehler beim bauen mit der musl libc: ../../gdb/mips-linux-nat.c:34:10: fatal error: sgidefs.h: No such file or directory 34 | #include | ^~~~~~~~~~~ compilation terminated. Dieses Problem lässt sich durch diesen einfachen Patch beheben: --- a/gdb/mips-linux-nat.c +++ b/gdb/mips-linux-nat.c @@ -31,7 +31,7 @@ #include "gdb_proc_service.h" #include "gregset.h" -#include +#include #include "nat/gdb_ptrace.h" #include #include "inf-ptrace.h" gdb braucht etwas mehr Argument um statisch zu linken und source-highlight muss deaktiviert werden für statisches linken sonst kompiliert gdb nicht. ../configure --host=mipsel-linux-musl --enable-static=yes --disable-shared --with-static-standard-libraries --disable-source-highlight make LDFLAGS=-static Die Anwendungen liegen jetzt in gdb/gdb und gdb/gdbserver/gdbserver. Die Debugsymbole machen ca. 90% der größe aus, nachdem sie entfernt wurden ist der gdb 8.8MB und der gdbserevr 900KB groß. /home/hauke/wifi-cam/mipsel-linux-musl-cross/bin/mipsel-linux-musl-strip gdb/gdb /home/hauke/wifi-cam/mipsel-linux-musl-cross/bin/mipsel-linux-musl-strip gdb/gdbserver/gdbserver