运行与调试命令记录。

运行

首先安装环境包:

sudo apt-get -y install gcc-arm-linux-gnueabihf

然后编译:

arm-linux-gnueabihf-gcc -o hello hello.c

这样用 qemu 直接运行的话会报没有动态链接库:

$ qemu-arm-static ./hello         
qemu-arm: Could not open '/lib/ld-linux-armhf.so.3': No such file or directory

这是因为我们的环境并不是 ARM,在安装 gcc-arm-linux-gnueabihf 的时候,相关的动态链接库其实安装到了 /usr/arm-linux-gnueabihf 下,所以我们可用这样运行:

qemu-arm-static -L /usr/arm-linux-gnueabihf/ hello

其中 -L 指定了动态链接库的位置。

或者静态编译再用:

arm-linux-gnueabihf-gcc -static -o hello hello.c

调试

调试也比较简单,qemu 提供了调试接口:

qemu-arm-static -L /usr/arm-linux-gnueabihf/ -g 1234 hello

其中 -g 代表启动调试,在 1234 端口等待 gdb 的连接。

这样就可以用 gdb-multiarch 连上去了:

$ gdb-multiarch -q
...
pwndbg> target remote 127.0.0.1:1234
...