在特定情况下,我尝试使用gdb在arm64设备中调试应用程序:-The设备是运行linux的嵌入式linux arm64:
$ 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位上的应用程序,该应用程序使用以下命令执行:
/customfolder/lib32/ld-linux-armhf.so.3 --library-path /customfolder/lib32 ./TestGDB32到目前为止,应用程序运行白化问题,但问题是当我想使用gdb调试它时。
我测试了很多组合,但每次我都无法调试应用程序。恐怕在启动gdb时,他认为我是在调试ld-linux-armhf.so.3,而不是我的应用程序。我以这种方式启动调试:
/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位应用程序的调试。
主机上的输出如下:
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位应用程序?
发布于 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)。
如果这样做,调试应该只运行™。
https://stackoverflow.com/questions/73883980
复制相似问题