assembly - 使用动态链接 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?)
知道发生了什么吗?是否可以使用链接库调试程序?如果没有,是否有可用的静态库?
解决方案
推荐阅读
- c# - C#数组中没有重复项
- r - R根据前列的比较生成值
- google-drive-api - 在 Google Colab 运行时重新验证或删除验证 Pydrive
- linux - 如何从 oom 终止进程中获取 ppid?
- java - 如何将 Spring Web 应用程序配置为每个端点使用不同的身份验证方法
- python - 使用内部支持的优化器优化 scikit-learn 中 GPR 的 RBF 内核的内核参数
- javascript - 函数属性不是 Polymer 中的函数
- git - 来自特定分支的 TFS 条件拉取请求
- python - 如何将字符串值与文本文件Python中的每一行连接起来
- jenkins - sed 命令的 Jenkins 管道失败