adr alix android apu asa auswahl backup bash bewegung bom buecher c cfengine checklisten cisco computernetz container crypto debian denog dhcp docker dokumentieren duply dvcs ebtables email epub fairphone2 fedora firewall fossilscm git gns3 gre grep hardware i2c iproute ipsec iptables ipv6 kalender konferenz kpartx latex laufen libgcrypt lighttpd linux lua lur make mikrotik monotone mount mysql netbox netflow nfdump nfsen openvpn openwrt pac paketfilter pcap performance perl postfix programmieren projekt proxy pxelinux python qubes-os rancid rezension rfc rpm rs232 schreiben script seriell sftp shell software spiel stehen switch sysadmin syslog systemd termux test troubleshoot ubuntu uci vcs virtualbox virtuell vpn wine wireshark xen xml

32bit-Programme auf 64bit-Linux

Es ist noch gar nicht lange her, dass ich auf meinen Linux-Rechnern ausschließlich 32bit-Programme verwendete. Ich hab auch noch ein paar Geräte, deren Prozessor nur mit 32bit arbeitet.

Und doch laufen heutzutage auf den meisten Geräten, mit denen ich zu tun habe, fast ausschließlich 64bit-Programme. Zwar kann Linux noch immer mit dem kleineren Format umgehen, doch das ist selten nötig und meist muss ich dafür zunächst ein paar zusätzliche Bibliotheken installieren.

Doch erstmal muss ich wissen, dass ich es mit einem 32bit-Programm zu tun habe. Im konkreten Fall ging es um ein Binärprogramm, das aus mehr oder weniger vertrauenswürdiger Quelle stammte (der VPN-Client von Checkpoint für Linux) und partout nicht in der dafür bereitgestellten Linux-VM laufen wollte.

Die Fehlermeldungen waren etwas missverständlich, so dass ich nicht gleich erkannte, was los war:

$ ./launcher
sh: 1: ./launcher: not found
$ strace -f ./launcher 
execve("./launcher", ["./launcher"], 0x7ffc6b8b0a08 /* 31 vars */) = -1 ENOENT (No such file or directory)
strace: exec: No such file or directory
+++ exited with 1 +++
$ ls -l ./launcher
-rwxrwxr-x 1 vboxuser vboxuser 39144 Nov 16 15:57 ./launcher

Mit file wurde es dann offensichtlich:

$ file ./launcher 
./launcher: ELF 32-bit LSB pie executable, Intel 80386, version 1 (SYSV), ...

Das ist ein 32bit-Binärprogramm. Natürlich läuft es auf Linux, mit den entsprechenden Bibliotheken:

$ sudo apt install libc6-i386
$ ./launcher
...

Wie kann ich sonst noch herausbekommen, was mit einem Binärprogramm los ist, welches partout nicht starten will, wenn file nicht installiert ist.

Das Programm ldd aus libc-bin, das normalerweise anzeigt, welche dynamischen Bibliotheken ein Programm benötigt, hilft hier leider nicht. Abgesehen davon, dass man ldd nur auf Programme aus vertrauenswürdigen Quellen ansetzen sollte. Die Handbuchseite erklärt den Grund dafür.

$ ldd main.out
    not a dynamic executable

Das Programm objdump aus 'binutils' hingegen kann hier weiterhelfen:

$ objdump -p ./launcher 

./launcher:     file format elf32-i386
...

Ein 32bit Binärprogramm kompilieren

Normalerweise will ich auf einem 64bit-System keine 32bit-Programme haben, weil diese zusätzliche Bibliotheken benötigen und die Vorteile der 64bit-CPU nicht ausnutzen können.

Bin ich jedoch auf ein Programm angewiesen, das mit 64bit nicht korrekt läuft, weil es nicht dafür ausgelegt ist und der Aufwand für die Portierung zu groß ist, kann ich es mit den passenden Bibliotheken für 32bit übersetzen:

$ sudo apt-get install build-essential libc6-dev-i386
$ cat > main.c <<EOF
#include <stdio.h>

int main(void) {
    puts("hello world");
    return 0;
}
EOF
$ gcc main.c -o main.out -m32
$ ./main.out 
hello world
$ file main.out
./main.out: ELF 32-bit LSB pie executable, Intel 80386, version 1 (SYSV), ...

Benötigt das Programm zusätzliche Bibliotheken, außer den in Libc vorhandenen, muss ich diese ebenfalls aus den Quellen übersetzen.

Will ich dann so ein Programm auf anderen 64bit-Systemen einsetzen, muss ich daran denken, auch dort die passenden Laufzeitbibliotheken zu installieren.

Posted 2025-11-25 Tags:

32bit-Programme auf 64bit-Linux
Posted 2025-11-25
Konfiguration und Dokumentation
Posted 2025-10-20
Default-Konfiguration finden
Posted 2025-09-23
Git einrichten
Posted 2025-08-03
Verbindungsprobleme im VLAN
Posted 2025-04-19
Kalender 2025
Posted 2024-12-23
Texte mit less untersuchen
Posted 2024-09-17
Kalender 2024
Posted 2023-12-31
Kontrolliertes Ping
Posted 2023-02-15
Kalender 2023
Posted 2023-01-03