如何在qemu用户模式模拟进程中的符号上设置断点?

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

由于 qemu 用户模式模拟不支持

ptrace
系统调用,我尝试通过 qemu 的 gdbstub 调试 qemu 用户模式模拟进程,并使用另一个 gdb 实例通过
target remote :1234
连接到它。

这对于一些基本命令(如

si
)到单步指令来说效果很好,但我无法在主模拟可执行文件中的符号上设置断点(如
main
)。只需运行
break main
就会说断点设置为某个原始的未重定位地址(例如 0x63a,但如果我在 gdb 客户端中点击
c
,则主可执行文件的符号永远不会解析为真实的虚拟地址,然后永远不会被击中。

这是调试 qemu 用户模式模拟进程的常见问题吗?有什么方法可以正确设置断点吗?

qemu
1个回答
0
投票

如果您在真实目标上调试本地应用程序或远程应用程序,GDB 似乎足够聪明,可以应用重定位偏移量。然而对于 QEMU 来说,情况似乎并非如此。

我的工作如下:

服务器:

qemu-aarch64 -g 1234 -L <my sysroot> <my executable>

GDB-客户端:

gdb-multiarch -ex "target remote :1234" -ex "set sysroot <my sysroot>" -ex "file <my executable> -o 0x4000000000"

并且

0x4000000000
是我的服务器上运行的所有可执行文件的重定位偏移量。

帮助我找到此解决方案的一个问题是:QEMU“-bios”与“-kernel”与“-device loader,file=...”

© www.soinside.com 2019 - 2024. All rights reserved.