我已经按照使用 QEMU/工具链交叉调试 MIPS ELF的指南来交叉编译一个简单的 hello world 应用程序,但是由于某种原因,我在使用 gdb-multiarch 打开它时遇到了分段错误。
我从指南中遵循的确切步骤
$ sudo apt-get install libc6-mipsel-cross # For MIPS-EL
$ sudo apt-get install gcc-mipsel-linux-gnu # For MIPS-EL on Ubuntu 16.04
$ sudo mkdir /etc/qemu-binfmt
$ sudo ln -s /usr/mipsel-linux-gnu /etc/qemu-binfmt/mipsel # MIPSEL
$ mipsel-linux-gnu-gcc -xc -static -o mipsel-test hello.c
$ gdb-multiarch mipsel-test
运行文件
mipsel-test: ELF 32-bit LSB executable, MIPS, MIPS-II version 1 (SYSV), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=27b56a9e12c8e083759f25699b624a87e8c3d86a, not stripped
运行 gdb-multiarch 的输出
$ gdb-multiarch ./mipsel-test GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1 版权所有 (C) 2016 Free Software Foundation, Inc. 许可证 GPLv3+:GNU GPL 版本 3 或更高版本 这是免费软件:您可以自由更改和重新分发它。 在法律允许的范围内,不提供任何保证。输入“显示复制” 和“显示保修”了解详情。 这个 GDB 被配置为“x86_64-linux-gnu”。 键入“show configuration”以获取配置详细信息。 有关错误报告的说明,请参阅: . 在线查找 GDB 手册和其他文档资源: . 如需帮助,请键入“帮助”。 输入“apropos word”以搜索与“word”相关的命令... 从 ./mipsel-test...读取符号...分段错误(核心转储)
输出运行 gdb
$ gdb mipsel-test GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1 版权所有 (C) 2016 Free Software Foundation, Inc. 许可证 GPLv3+:GNU GPL 版本 3 或更高版本 这是免费软件:您可以自由更改和重新分发它。 在法律允许的范围内,不提供任何保证。输入“显示复制” 和“显示保修”了解详情。 这个 GDB 被配置为“x86_64-linux-gnu”。 键入“show configuration”以获取配置详细信息。 有关错误报告的说明,请参阅: . 在线查找 GDB 手册和其他文档资源: . 如需帮助,请键入“帮助”。 输入“apropos word”以搜索与“word”相关的命令... 从 mipsel-test 读取符号...(未找到调试符号)...完成。