Question

Je suis en train de comprendre le point d'entrée d'un vieux classique application Mac. Je l'ai démonté la première ressource CODE (CODE # 0 pas, ce qui est la table de saut). Le code se réfère à des variables de la pile: un mot à 0004 (A7), un réseau de longs mots de départ à 000C (A7) dont la longueur correspond à la valeur à 0004 (A7), et un mot long finale au-delà de ce tableau que semble être un pointeur vers une chaîne de caractères.

Le tableau de longs regards de mots comme des cordes à première vue, il ressemble superficiellement que nous avons affaire à un (int argc, char ** argv) la situation, à l'exception du tableau « argv » est en ligne dans le cadre de la pile.

Que doit faire un programme s'attend sur sa pile / registres quand il est d'abord appelé par le Mac OS?

Était-ce utile?

La solution

De mémoire, je ne pense pas qu'il y ait quelque chose d'intéressant sur la pile lorsque votre ressource CODE est d'abord appelé. Mac OS Classic n'a pas utilisé argc / argv. Il a été long temps, donc je peux me tromper, et je jette tous mes vieux volumes Inside Mac il y a quelques années, donc je ne peux pas facilement vérifier.

Autres conseils

Je ne sais pas si c'est l'utilisation (je n'examiné cette question parce qu'il y avait 68000 dans le titre ...!) Mais vous olde information sur le développement Mac semble être ici:

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

(Conjecture: les données argv pourrait bien effectivement être sur la pile Une façon évidente de diviser la ligne de commande en deux parties serait de commencer à la fin plutôt que le début Arpentez les arrière de la ligne de commande (en utilisant le mode d'adressage -(An).. ) et trouver les pièces de cette façon. Cela peut compliquer les choses un peu, mais 68000 peut comparer les valeurs immédiates à la mémoire de sorte qu'il n'y a pas grand tracas pour vérifier \ et similaires (si Mac OS fait cela). une fois que le début d'une pièce se trouve, mettre son adresse sur la pile - vous avez probablement obtenu le départ à portée de main (en raison de prédécrémentation) mais PEA serait aussi facile en tout état de cause -. et percez un 0 dans sa fin de mettre fin à une fois tous les pointeurs ont été poussé, le chargeur pourrait faire MOVEA.L A7,-(A7) ou PEA A7 pour pousser le pointeur argv.

(Ce serait probablement tout à fait bien si vous et il avons écrit il ne me surprendrait pas si elle était l'approche réellement prise.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top