如何使用 QEMU/GDB 运行/调试 ARM bin 文件?

问题描述 投票:0回答:0

我正在开发带有 RTOS 的 ARMv7 SoC 系统。
现在我有一个二进制文件,它是通过从正在运行的系统中转储内存生成的,我想用 QEMU 和 GDB 运行/调试二进制文件。

我是在一个 Linux 终端上做的,

qemu-system-arm --machine vexpress-a9 -nographic -m 1024 -kernel ./memory0_4k.bin -s -S

在另一个终端,

gdb-multiarch memory0_4k.bin
The program has no registers now.
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
warning: No executable has been specified and target does not support
determining executable automatically.  Try using the "file" command.
0x05d2b46c in ?? ()

(gdb) info registers
r0             0x0                 0
r1             0x8e0               2272
r2             0x60000100          1610612992
r3             0x0                 0
r4             0x0                 0
r5             0x0                 0
r6             0x0                 0
r7             0x0                 0
r8             0x0                 0
r9             0x0                 0
r10            0x0                 0
r11            0x0                 0
r12            0x0                 0
sp             0x0                 0x0
lr             0x10000060          268435552
pc             0x5d2b46c           0x5d2b46c
cpsr           0x400001db          1073742299
fpscr          0x0                 0
fpsid          0x41033090          1090728080
fpexc          0x0                 0
NSACR          0x0                 0
MIDR_S         0x410fc090          1091551376
......

我也试过 objdump 如下,

arm-linux-gnueabi-objdump -bbinary -marm -D memory0_4k

memory0_4k:     file format binary


Disassembly of section .data:

00000000 <.data>:
       0:       e59fffb8        ldr     pc, [pc, #4024] ; 0xfc0
       4:       e59fffb8        ldr     pc, [pc, #4024] ; 0xfc4
       8:       e59fffb8        ldr     pc, [pc, #4024] ; 0xfc8
       c:       e59fffb8        ldr     pc, [pc, #4024] ; 0xfcc
      10:       e59fffb8        ldr     pc, [pc, #4024] ; 0xfd0
      14:       e59fffb8        ldr     pc, [pc, #4024] ; 0xfd4
      18:       e59fffb8        ldr     pc, [pc, #4024] ; 0xfd8
      1c:       e59fffb8        ldr     pc, [pc, #4024] ; 0xfdc
      20:       e59f1028        ldr     r1, [pc, #40]   ; 0x50
      24:       e3a00001        mov     r0, #1
      28:       e5810000        str     r0, [r1]
      2c:       e1a00000        nop                     ; (mov r0, r0)

显示.data部分!
那么在这种情况下,如何使用QEMU+GDB调试内存转储的二进制文件呢?

linux gdb qemu
© www.soinside.com 2019 - 2024. All rights reserved.