Что находится в стеке 68000, когда в программу входит классический MacOS? - PullRequest
13 голосов
/ 30 апреля 2010

Я пытаюсь понять точку входа старого классического приложения Mac. Я разобрал первый ресурс CODE (не CODE # 0, который является таблицей переходов). Код ссылается на некоторые переменные вне стека: слово в 0004 (A7), массив длинных слов, начинающихся в 000C (A7), длина которых является значением в 0004 (A7), и последнее длинное слово после этого массива, которое кажется указателем на строку символов.

Массив длинных слов на первый взгляд выглядит как строки, поэтому внешне он выглядит так, как будто мы имеем дело с (int argc, char ** argv) ситуацией, за исключением того, что массив argv встроен в кадр стека.

Чего ожидать программе от своего стека / регистров, когда она впервые вызывается Mac OS?

Ответы [ 2 ]

5 голосов
/ 02 мая 2010

Не знаю, имеет ли это какое-либо значение (я только посмотрел на этот вопрос, потому что в названии было 68000 ...!), Но вы, кажется, здесь найдете информацию о разработке Mac:

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

(Гипотеза: данные argv вполне могут находиться в стеке. Очевидный способ разбить командную строку на части - начать с конца, а не с начала. Пройдите командную строку назад (используя -(An) режим адресации) и таким образом находите фрагменты. Это может немного усложнить ситуацию, но 68000 может сравнивать непосредственные значения с памятью, так что нет проблем с поиском \ и т.п. (если Mac OS делает это). начало фрагмента найдено, поместите его адрес в стек - возможно, у вас есть удобный старт (из-за предопределения), но PEA сделает это легко в любом случае - и вставьте 0 в его конец, чтобы завершить После того, как все указатели были нажаты, загрузчик может сделать MOVEA.L A7,-(A7) или PEA A7, чтобы нажать указатель argv.

(Это, вероятно, сработало бы неплохо, если бы вы его закодировали, и поэтому меня не удивит, если бы это был действительно выбранный подход.)

4 голосов
/ 30 апреля 2010

Из памяти Я не думаю, что в стеке есть что-то интересное, когда ваш ресурс CODE впервые вызывается. Классическая Mac OS не использовала argc / argv. Это было долго время, поэтому я могу ошибаться, и несколько лет назад я выбросил все свои старые тома Inside Mac, поэтому я не могу легко проверить.

...