使用 Rosetta 在Apple Silicon(M1/2)中调试 X86 程序

因为之前在Apple Silicon启动的 amd64 容器都是以 Qemu 模式运行的,所以无法正常的使用 GDB 进行调试应用程序。但是在之前 Docker 宣布支持了Rosetta on Linux,这就使得我们可以使用Rosetta来启动amd64架构的容器。然后近日有博主发现Rosetta中内置了 GDB 服务,可以使用这个 GDB 服务在amd64架构的容器中调试 amd64 架构的程序

首先我们需要在 Docker 中开启Rosetta on Linux

在这里插入图片描述然后使用一个 amd64 的镜像来启动一个 amd64 的容器

docker pull --platform=linux/amd64 ubuntu:20.04  
docker run -it --cap-add=SYS_PTRACE --security-opt="seccomp=unconfined" --platform=linux/amd64 ubuntu:20.04 /bin/bash

这个推荐使用 gef 作为 gdb 的插件,然后使用如下的命令就可以使用rosetta gdb 来调试程序

ROSETTA_DEBUGSERVER_PORT=1234 a.out & gdb
(gdb) set architecture i386:x86-64
(gdb) file ./a.out
(gdb) target remote localhost:1234
(gdb) continue

在这里插入图片描述
在这里插入图片描述

参考目录

  • https://sporks.space/2023/04/12/debugging-an-x86-application-in-rosetta-for-linux/
  • https://github.com/microsoft/vscode-cpptools/issues/10788
  • https://qiita.com/chimpan/items/574ad8ad0ac142c71c37
  • https://developer.apple.com/documentation/virtualization/running_intel_binaries_in_linux_vms_with_rosetta?language=objc

猜你喜欢

转载自blog.csdn.net/kelxLZ/article/details/131189395