Escribí un programa en C muy simple y mi objetivo es construir un binario sólo para x86 y luego ejecutar ese binario en un Apple Silicon Mac y hacer que Rosetta 2 lo traduzca a un binario Universal 2. Quiero mirar el binario traducido por Rosetta 2 específicamente; estoy no buscando construir una aplicación Universal 2 yo mismo (eso sería trivial).
He intentado ejecutar el programa a través de Terminal ( $ ./helloworld
) e incluso pegarlo dentro de un .app
, colóquelo en la carpeta de Aplicaciones y haga doble clic en él. En ambos casos, el programa se ejecuta correctamente, pero según $ file helloworld
El binario sigue siendo sólo x86 (Rosetta 2 no ha añadido un ejecutable arm64).
¿Alguna idea de cómo forzar a Rosetta 2 a traducir un binario?
1 votos
¿Busca que Rosetta cree un ejecutable arm64 a partir del binario x86? ¿Por qué no construir la aplicación como arm64 para empezar?
1 votos
@ErniePC12 Sí. Quiero desensamblar el binario arm64 traducido y compararlo con un binario construido de forma nativa.
0 votos
Para forzar que la aplicación se abra con Rosetta, marque la casilla en la ventana de información. Pero no estoy seguro de que esto modifique la aplicación con el binario traducido. Probablemente colocaría ese binario traducido en algún lugar en una caja de arena. ¿Tal vez comprobar /Library/Application Support/?
0 votos
Rosetta no funciona así, es un emulador que traduce las instrucciones en tiempo de ejecución. Aunque algunas instrucciones se traducen antes de la primera ejecución, Rosetta no puede y no lo hace para todo el ejecutable. (Bueno, tal vez teóricamente podría para un programa muy simple, pero no está diseñado para funcionar así, porque no puede en el caso general).
1 votos
Wowfunhappy: completamente equivocado. Rosetta2 es un traductor.
0 votos
Bueno, quizás debería haber dicho más claramente que es un híbrido: traduce algunas secciones pero emula otras. No se puede traducir completamente un binario antes de tiempo, porque el binario puede reescribir su propio código. La "traducción" de Rosetta no es autosuficiente en el sentido que imagina el candidato.
2 votos
@Wowfunhappy Soy consciente de que algunos binarios no se pueden traducir completamente antes de tiempo (por ejemplo, el código JIT), pero Rosetta 2 hace algunos traducción en el momento de la instalación. En el caso de mi programa hello world, debería ser capaz de traducir todo, pero incluso si no, debe traducir algo . Mi objetivo es averiguar cómo desencadenar esta traducción y dónde termina el binario traducido.