2010-04-30 27 views
12

Tôi đang cố gắng hiểu điểm nhập của ứng dụng Mac cổ điển cũ. Tôi đã tháo tài nguyên CODE đầu tiên (không phải CODE # 0, đó là bảng nhảy). Mã đề cập đến một số biến trong ngăn xếp: một từ 0004 (A7), một dãy các từ dài bắt đầu từ 000C (A7) có độ dài là giá trị 0004 (A7) và một từ dài cuối cùng vượt ra ngoài mảng đó dường như là một con trỏ đến một chuỗi ký tự.Trên ngăn xếp 68000 khi MacOS cổ điển tham gia chương trình là gì?

Mảng từ dài trông giống như chuỗi ở cái nhìn đầu tiên, vì vậy trông bề ngoài giống như chúng ta đang xử lý một tình huống (int argc, char ** argv), ngoại trừ mảng "argv" nằm trong khung ngăn xếp .

Chương trình sẽ trông đợi gì trên ngăn xếp/đăng ký của nó khi ứng dụng này được hệ điều hành Mac gọi lần đầu tiên?

+2

Cảm ơn con trỏ, Martin. Tuy nhiên, MacOS có trước Linux một vài năm và chắc chắn không dựa trên thời gian chạy Unix ("tài nguyên và dĩa dữ liệu", bất cứ ai?). Mã tôi đang xem là gần như nhưng không hoàn toàn giống như Unixy argc, argv entry convention. –

Trả lời

3

Từ bộ nhớ Tôi không nghĩ có bất kỳ điều gì quan tâm trên ngăn xếp khi tài nguyên CODE của bạn được gọi đầu tiên. Mac OS cổ điển không sử dụng argc/argv. Đó là một thời gian dài dài mặc dù, vì vậy tôi có thể sai, và tôi đã ném ra tất cả các khối lượng cũ của tôi Inside Mac một vài năm trước đây, vì vậy tôi không thể dễ dàng kiểm tra.

+1

Thật vậy, có vẻ như điều duy nhất bạn nhận được khi nhập vào hệ nhị phân cổ điển MacOS là A5 chỉ vào "thế giới A5". Tôi đã nhìn vào mã đầu tiên trong phân đoạn CODE 1, mà là _not_ cùng một điều như mã được nhắc đến bởi mục nhập đầu tiên trong bảng nhảy được lưu trữ trong phân đoạn CODE 0. Cảm ơn sự giúp đỡ của bạn. –

+0

À vâng - thế giới A5 - Quả cầu tuyết QuickDraw và hình cầu của chương trình của bạn - Tôi đã quên mất điều đó. –

5

Tôi không biết nếu đó là bất kỳ sử dụng (tôi chỉ nhìn vào câu hỏi này vì nó đã có 68000 trong tiêu đề ...!) Nhưng các ngươi thông tin phát triển Mac olde có vẻ là ở đây:

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

(phỏng đoán: dữ liệu argv có thể thực sự nằm trên ngăn xếp) Một cách rõ ràng để tách dòng lệnh thành các phần sẽ bắt đầu ở cuối thay vì bắt đầu. Điều này có khả năng làm phức tạp mọi thứ một chút, nhưng 68000 có thể so sánh các giá trị ngay lập tức với bộ nhớ vì vậy nó không có rắc rối lớn để kiểm tra \ và tương tự (nếu Mac OS thực hiện điều đó). Khi bắt đầu tìm thấy một mảnh, hãy đặt địa chỉ của nó trên ngăn xếp - bạn có thể đã bắt đầu tiện dụng (do tiền tố) nhưng PEA sẽ làm điều này dễ dàng trong bất kỳ sự kiện nào - và poke 0 vào cuối để chấm dứt nó. Khi tất cả các con trỏ đã được đẩy, bộ tải có thể làm MOVEA.L A7,-(A7) hoặc PEA A7 để đẩy con trỏ argv.

(Điều này có thể sẽ hoạt động khá tốt nếu bạn mã hóa nó và vì vậy nó sẽ không làm tôi ngạc nhiên nếu nó là phương pháp thực sự được thực hiện.)

+1

Cảm ơn bạn đã liên kết, nó sẽ trở nên rất tiện dụng. Than ôi, tôi đã nhìn vào mã sai nghĩ rằng đó là điểm vào; nó có vẻ là một số đoạn mã lắp ráp viết tay cứng để làm một cái gì đó thông minh với một chuỗi các chuỗi mà, có, xuất hiện để được hoàn toàn trên ngăn xếp. –

+0

@John: xem cụ thể http://developer.apple.com/legacy/mac/library/documentation/mac/Processes/Processes-15.html#HEADING15-0. Có lẽ bạn đang nhìn thấy thư viện thời gian chạy C mà xây dựng một argc và argv. – Potatoswatter

+0

+1 cho 68000 ref –

Các vấn đề liên quan