Big-Endian Testing with QEMU: How to Test Cross-Platform Code Without Real Hardware
Software engineer Hans Wennborg has published a practical guide on using QEMU user-mode emulation to test big-endian code without access to real big-endian hardware — a critical skill for writing t...
Software engineer Hans Wennborg has published a practical guide on using QEMU user-mode emulation to test big-endian code without access to real big-endian hardware — a critical skill for writing truly portable software.
The Problem
Most modern systems (x86_64, ARM AArch64) are little-endian: bytes are stored least-significant first. But some architectures like MIPS use big-endian: most-significant byte first. Code that handles binary data, network protocols, or file formats must work correctly on both.
The Solution
QEMU user-mode emulation allows running binaries compiled for foreign architectures:
# Install QEMU and cross-compiler
sudo apt-get install qemu-user gcc-mips-linux-gnu
# Cross-compile for MIPS (big-endian)
mips-linux-gnu-gcc -static endian.c
# Run via QEMU
qemu-mips a.out
Example Output
uint32_t x = 0x12345678;
// Little-endian (x86): 0x78, 0x56, 0x34, 0x12
// Big-endian (MIPS): 0x12, 0x34, 0x56, 0x78
Why It Matters
- Network protocols: TCP/IP uses big-endian (network byte order)
- File formats: PNG, JPEG, WAV use big-endian fields
- Serialization: Cross-platform data exchange requires endianness awareness
- Security: Endianness bugs can cause data corruption or vulnerabilities
Practical Applications
This technique extends beyond byte order testing — QEMU can emulate dozens of architectures including ARM, PowerPC, s390x, and RISC-V, making it invaluable for:
- CI/CD pipeline testing across architectures
- Debugging architecture-specific compiler behavior
- Testing operating system kernels
- Validating portable code before hardware is available
← Previous: Mercurial Dyson: Engineering Blueprint for Disassembling Mercury Into a Dyson SwarmNext: Drift Protocol Drained of $285M in Solana's Largest 2026 DeFi Hack via Fake Token and Governance Hijack →
0