On Ubuntu precise x86_64:


    # Get QEMU ARM ELF emulator and cross-compile toolchain
    sudo apt-get install qemu-user
    wget http://www.gnuarm.com/bu-2.16.1_gcc-4.0.2-c-c++_nl-1.14.0_gi-6.4_x86-64.tar.bz2
    tar -xjf bu-2.16.1_gcc-4.0.2-c-c++_nl-1.14.0_gi-6.4_x86-64.tar.bz2

    # Store a hello world program
    echo "#include <stdio.h> 
    int main(int argc, char *argv[]) 
        printf(\"hello arm\\n\"); 
        return 0; \
    }" > hello.c

    # Compile and run the program
    gnuarm-4.0.2/bin/arm-elf-gcc hello.c -o hello.bin
    qemu-arm hello.bin

Note that qemu-arm is different than qemu-system-arm. qemu-arm translates ARM syscalls to the native host syscalls to support quick-and-easy execution of ARM ELF binaries on mainstream architectures. qemu-system-arm runs the code directly on emulated ARM hardware, to support running something like an operating system/Linux kernel.

You can use the -g flag to remote debug the target, but unfortunately qemu-arm itself crashes if the application under test raises a SIGSEGV regardless, so this isn’t going to help me with testing ARM support for exploitable. But, it’s still pretty slick.