把 c 编译成 arm 指令的可执行文件
/usr/bin/arm-linux-gnueabi-g++ hello.cpp
cat hello.cpp
#include <stdio.h>
void crash(){
char *a=0;
*a=0;
}
int main()
{
printf("hello world\n");
crash();
printf("after crash\n");
}
直接运行报错,因为 host 是 linux x86
$ ./a.out
-bash: ./a.out: cannot execute binary file
需要用 qemu-arm 来运行, 结果是期望的
qemu-arm -L /usr/arm-linux-gnueabi/ a.out
hello world
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
Segmentation fault (core dumped)
进行远程调试(关键是增加 -g 参数,指定端口为1235)
qemu-arm -g 1235 -L /usr/arm-linux-gnueabi/ a.out

本文介绍了如何将C程序编译为ARM指令的可执行文件,并在qemu-arm中运行。当遇到Segmentation fault时,通过添加-g参数启用远程调试,并启动gdbserver。虽然使用Linux-x86的gdb无法显示符号,但需要使用特定于ARM的gdb进行有效调试。
最低0.47元/天 解锁文章
476

被折叠的 条评论
为什么被折叠?



