使用 IDA Pro 和 Qemu 调试 ARM 二进制文件

逆向工程 艾达
2021-06-17 22:18:11

我正在通过连接到 QEMU(远程 gdb 调试)使用 IDA Pro 调试 ARM 二进制文件。

在 gdb 配置中,我选择ARM_versatilepb作为设备。

现在,我能够成功调试 ARM 二进制文件。但是,我无法在二进制文件中执行诸如fork(),之类的系统调用socket()

我认为这是因为我使用的是 QEMU 的裸机配置。那么,如何修改此配置以在 QEMU 上运行完整的 Linux 系统,以便我也可以执行系统调用?

gdb_arch.cfgIDA Pro文件中还有一个设备名称,ARM_Linux,它有arm_root.img命令行中传递参数。

我选择了这个设备,但即便如此,也无法执行系统调用。

我目前使用的裸机配置这里有详细介绍

1个回答

听起来您正试图通过直接在 qemu-system-arm 中运行来模拟 ARM ELF 二进制文件,在这种情况下,系统调用不起作用的原因是没有 Linux 内核来处理这些系统调用。

您可能正在寻找的是 qemu-arm,它将 ARM 二进制文件作为普通 ELF 运行,将 ARM 系统调用转换为您的底层英特尔内核。qemu-arm 模拟器有一个内置的 GDB 服务器,IDA 可以连接到它。

或者,您可以获得在 qemu-system-arm 中运行的 ARM Linux 系统(例如 Debian,或者可能有一个旨在在 Qemu 中运行的 raspi 版本?),此时您可以将您的 ELF 二进制文件复制到 Qemu VM 和在那里运行它。然后,您可以使用 GDB 服务器或 IDA 附带的 Linux ARM 调试存根将 IDA 附加到正在运行的进程。