Use Rosetta para depurar programas X86 en Apple Silicon (M1/2)

Debido a que los contenedores amd64 que se iniciaron anteriormente en Apple Silicon se ejecutan en modo Qemu, GDB no se puede usar para depurar aplicaciones normalmente. Pero antes de que Docker anunciara que es compatible con Rosetta en Linux, esto nos permite usar Rosetta para iniciar contenedores de la arquitectura amd64. Luego, recientemente, un blogger descubrió que Rosetta tiene un servicio GDB incorporado, que se puede usar para depurar programas de arquitectura amd64 en contenedores de arquitectura amd64.

Primero necesitamos habilitar Rosetta en Linux en Docker

inserte la descripción de la imagen aquíLuego use una imagen amd64 para iniciar un contenedor 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

Se recomienda usar gef como complemento de gdb y luego usar el siguiente comando para usar rosetta gdb para depurar el programa

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

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

lista de referencia

  • https://sporks.space/2023/04/12/depuración-de-una-aplicación-x86-en-rosetta-para-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

Supongo que te gusta

Origin blog.csdn.net/kelxLZ/article/details/131189395
Recomendado
Clasificación