Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

Я не знаю, будет ли это использовать (я только посмотрел на этот вопрос, потому что у него было 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.

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