首页 > 解决方案 > 使用动态链接 libc 开始调试 32 位 ARM 程序集时 gdb 挂起

问题描述

我在 Raspberry Pi4(armv7l采用 Cortex-A72 的架构)上运行 Ubuntu 20.04 32 位服务器。我有一个简单的程序,return.s如下:

        .section .text
        .global _start
_start: mov r0, #1
        mov r7, #1
        swi 0

libc如果排除,我可以在本地组装、运行和调试程序:

as -g return.s -o return.o
ld return.o -o return
./return; echo $?  # result is "1"
gdb return
start              # breaks at first line

但是,如果我将其包含libc为动态链接库,则调试将挂起:

ld return.o -o return -lc-2.31 \
    -dynamic-linker=/usr/lib/arm-linux-gnueabihf/ld-linux-armhf.so.3
./return; echo $?  # result is "1"
gdb return
start              # hangs

如果我用 Ctrl-C 中断调试器,那么我会看到以下回溯:

#0  0xb6fe12fe in ?? () from /usr/lib/arm-linux-gnueabihf/ld-linux-armhf.so.3
#1  0xb6fd81e4 in ?? () from /usr/lib/arm-linux-gnueabihf/ld-linux-armhf.so.3
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

知道发生了什么吗?是否可以使用链接库调试程序?如果没有,是否有可用的静态库?

标签: assemblyarmgdblibc

解决方案


推荐阅读