首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用gdb和动态加载器将32位应用程序调试到远程目标arm64中

无法使用gdb和动态加载器将32位应用程序调试到远程目标arm64中
EN

Stack Overflow用户
提问于 2022-09-28 15:21:05
回答 1查看 22关注 0票数 0

在特定情况下,我尝试使用gdb在arm64设备中调试应用程序:-The设备是运行linux的嵌入式linux arm64:

代码语言:javascript
复制
$ uname-a 
Linux HMI-fa93 4.14.78-rt47 #1 SMP PREEMPT RT Fri Apr 29 08:40:42 UTC 2022 aarch64 GNU/Linux

在尝试将gdb与使用本机64位的应用程序一起使用时,我完全没有问题(在主机上使用gdb-multiarch,在目标上使用gdbserver aarch64 )。

在这个设备中,我还有一个运行在32位上的应用程序,该应用程序使用以下命令执行:

代码语言:javascript
复制
/customfolder/lib32/ld-linux-armhf.so.3 --library-path /customfolder/lib32 ./TestGDB32

到目前为止,应用程序运行白化问题,但问题是当我想使用gdb调试它时。

我测试了很多组合,但每次我都无法调试应用程序。恐怕在启动gdb时,他认为我是在调试ld-linux-armhf.so.3,而不是我的应用程序。我以这种方式启动调试:

代码语言:javascript
复制
/customfolder/lib32/ld-linux-armhf.so.3 --library-path /customfolder/lib32 /customfolder/bin/gdbserver --once host:10010 /customfolder/lib32/ld-linux-armhf.so.3 --library-path /customfolder/lib32 ./TestGDB32

基本上,我试图以32位运行gdb,并启动32位应用程序的调试。

主机上的输出如下:

代码语言:javascript
复制
0xf7fbea80 in ?? ()
(gdb) list
No symbol table is loaded.  Use the "file" command.
(gdb) bt
#0  0xf7fbea80 in ?? ()
#1  0x00000000 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

如何调试使用gdb使用此动态加载程序运行的32位应用程序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-28 15:40:02

我以这种方式启动调试

是的,当您以这种方式启动应用程序时,GDB会认为您正在运行ld-linux-armhf.so.3,调试将非常困难。

可以调试以这种方式启动的应用程序--您需要找出主二进制文件(假设它是PIE)和所有共享库的加载位置,并对每个共享库使用add-symbol-file,但一个更简单的解决方案是简单地构建应用程序,以便它引用所需的加载程序(-Wl,--dynamic-linker=/customfolder/lib32/ld-linux-armhf.so.3)和所需的RPATH (-rpath=/customfolder/lib32),并启动它“正常”(./TestGDB32)。

如果这样做,调试应该只运行™。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73883980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档