Pregunta

Estoy tratando de comprender el punto de entrada de una vieja clásica aplicación de Mac. He desmontado el primer recurso de código (no el código # 0, que es la tabla de saltos). El código se refiere a algunas variables de la pila: una palabra en 0004 (A7), un conjunto de palabras largas de a partir de 000C (A7) cuya longitud es el valor en 0004 (A7), y una palabra final largo más allá de esa matriz que parece ser un puntero a una cadena de caracteres.

La gama de apariencias palabras largas como cuerdas a primera vista, por lo que parece superficialmente a que estamos tratando con un (int argc, char ** argv) situación, excepto la matriz "argv" está en línea en el marco de pila.

Lo que debe estar esperando un programa en su pila / registros cuando por primera vez se llama por el Mac OS?

¿Fue útil?

Solución

De memoria no creo que haya nada de interés en la pila cuando el recurso de código se llama en primer lugar. Mac OS clásico no utilizó argc / argv. Ha sido un los tiempo, sin embargo, por lo que podría estar equivocado, y me tiró todos mis viejos volúmenes Dentro de Mac hace unos años, así que no puedo comprobar fácilmente.

Otros consejos

No sé si se trata de cualquier uso (sólo mirado a esta pregunta porque tenía 68000 en el título ...!), Pero Ye Olde información sobre el desarrollo de Mac parece ser aquí:

http://developer.apple.com/legacy /mac/library/documentation/macos8/mac8.html

(conjetura: los datos argv bien puede ser en realidad en la pila Una manera obvia para dividir la línea de comandos en partes sería empezar por el final y no al principio Caminar por las espaldas de línea de comandos (usando el -(An) modo de direccionamiento.. ) y encontrar las piezas de esa manera. potencialmente, esto complica las cosas un poco, pero 68000 se puede comparar los valores inmediatos a la memoria lo que no es una gran molestia para comprobar \ y similares (si Mac OS hace eso). una vez que el inicio de una pieza se encuentra, ponga su dirección en la pila - es probable que tenga el Handy Start (debido a predecremento) pero PEA haría tan fácil en cualquier caso -. y meter un 0 en su fin de darlo por terminado una vez que todos los punteros han sido empujados, el cargador podía hacer MOVEA.L A7,-(A7) o PEA A7 para empujar el puntero argv.

(Esto probablemente funcionaría bastante bien si ha codificado para arriba y lo que no me sorprendería si fue el enfoque tomado realmente.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top