因为我是交叉调试和交叉编译的新手,所以我需要一些帮助,因为我感到很困惑。我有一个 MIPS elf 文件, [myelf][1] 。你可以看到下面的输出file myelf
:
myelf: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, BuildID[sha1]=0xc89c3571514c7ec1afc74a189a9c2d24e276ec4c, with unknown capability 0xf41 = 0x756e6700, with unknown capability 0x70100 = 0x1040000 stripped
我只想运行和调试程序。所以我不需要交叉编译器对吗?由于我没有 MIPS 硬件(我有一个 INTEL 微处理器),我需要一个模拟器。我选择使用 QEMU。根据此站点,我下载了以下内核映像和 initrds:
debian_squeeze_mips_standard.qcow2
vmlinux-2.6.32-5-4kc-malta
然后我为 32 位(因为精灵信息)MIPS 系统运行了指定的命令。
qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0"
到目前为止,我在一个 shell 中运行了模拟器,命令 uname -a 给了我:
Linux debian-mips 2.6.32-5-4kc-malta #1 Tue Sep 24 00:02:22 UTC 2013 mips GNU/Linux
模拟器上只有非常基本的命令/工具。我已经读到 gdb 可以在我的 x86_64 主机上的远程目标(这里是 MIPS 模拟器)上进行调试。老实说,我不知道我现在应该做什么。我首先尝试在 qemu 模拟器上安装 gdb。当我运行 gdb my elf 时,我可以看到 gdb 自动配置为 mips-linux-gnu。
root@debian-mips:~# gdb myelf
GNU gdb (GDB) 7.0.1-debian
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "mips-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /root/myelf...(no debugging symbols found)...done.
信息文件为我提供了正确的信息(我用 IDA 拆卸了精灵,以便我可以确认)。
(gdb) info files
Symbols from "/root/myelf".
Local exec file:
`/root/myelf', file type elf32-tradlittlemips.
Entry point: 0x400670
0x00400154 - 0x00400161 is .interp
0x00400164 - 0x00400184 is .note.ABI-tag
0x00400184 - 0x0040019c is .reginfo
0x0040019c - 0x004001c0 is .note.gnu.build-id
0x004001c0 - 0x00400298 is .dynamic
0x00400298 - 0x0040033c is .hash
0x0040033c - 0x0040049c is .dynsym
0x0040049c - 0x0040057b is .dynstr
0x0040057c - 0x004005a8 is .gnu.version
0x004005a8 - 0x004005d8 is .gnu.version_r
0x004005d8 - 0x00400668 is .init
0x00400670 - 0x00400b00 is .text
0x00400b00 - 0x00400ba0 is .MIPS.stubs
0x00400ba0 - 0x00400bec is .fini
0x00400bec - 0x00400c2c is .rodata
0x00400c2c - 0x00400c30 is .eh_frame
0x00410c30 - 0x00410c3c is .ctors
0x00410c3c - 0x00410c44 is .dtors
0x00410c44 - 0x00410c48 is .jcr
0x00410c50 - 0x00410e00 is .data
0x00410e00 - 0x00410e04 is .rld_map
0x00410e10 - 0x00410e6c is .got
0x00410e6c - 0x00410e70 is .sdata
0x00410e70 - 0x00410e80 is .bss
但是当我想运行程序时什么都没有发生:
(gdb) r
Starting program: /root/myelf
我等了大约 10 分钟,什么也没发生。(通常程序应该打印一个字符串“Usage : ./myelf password”,因为我没有给出任何参数)。然后我尝试在模拟器上使用 gdbserver 和在主机上为 mipsel 处理器配置的 gdb 但它没有工作..
我可能会做错或愚蠢的事情,因为我很困惑。如果有人能告诉我我的过程出了什么问题,或者有人试图运行myelf 文件,我会知道他是如何做到的,以便能够在不同的机器上运行任何程序。
谢谢你,祝你有美好的一天!