簡體   English   中英

MPW工具主要符號的結構是什么?

[英]What is the structure of a MPW tool's main symbol?

這個問題是關於Mac OS Classic的 ,已經淘汰了好幾年了。 我希望有人仍然知道一些事情!

我過去幾周一直在構建一個PEF可執行解析器,我已經為它插入了一個PowerPC解釋器。 憑借良好的魔法,我希望能夠(在某種程度上)運行Mac OS X下的一些Mac OS 9程序。事實上,我現在准備開始使用小型應用程序進行測試。

為了幫助我,我在SheepShaver中安裝了舊版Mac OS並下載了(現在免費的)MPW工具1 ,我構建了一個“hello world”MPW工具(只是你的經典puts("Hello World!") C程序,除了為Mac OS 9編譯之外)。

構建時,會生成一個帶有代碼段和數據段的程序。 我希望我能夠跳轉到可執行文件的主要符號(如加載程序部分的標題中所指定的),但我大吃一驚:編譯器將主符號放在數據部分中

顯然,數據部分沒有可執行代碼。

回到Mac OS Runtime Architectures文檔(1997年出版,令人驚訝的仍然在Apple的網站上),我發現這完全合法:

使用主符號作為數據結構

如前所述,主符號不必指向例程,而是可以指向數據塊。 您可以通過插件使用此事實,其中主符號引用的數據塊可以包含有關插件的基本信息。 以這種方式使用主符號有幾個優點:

  • 以編程方式准備片段時,代碼片段管理器返回主符號的地址,因此您無需調用FindSymbol。
  • 您不必為插件保留和記錄導出的特定名稱。

但是,沒有特定的符號名稱意味着插件的目的不那么明顯。 插件可以在主符號數據結構中存儲其名稱,圖標或有關其符號的信息。 以這種方式存儲符號信息消除了對多個FindSymbol調用的需要。

因此,我的結論是,MPW工具在MPW shell中作為插件運行,並且可執行文件的主要符號指向一些應該告訴它如何啟動的數據結構。

但這仍然無法幫助我弄清楚數據結構中的內容,只是看看它的十六進制轉儲並不是很有啟發性(我知道編譯器為這個特定程序放置__start地址,但這絕對不夠使通用的MPW shell“替換”)。 顯然,2004年Mac OS 9上有關此主題的最有價值的信息來源似乎已經消失。

那么,MPW工具的主要符號指向的數據結構的格式是什么?

1.顯然,Apple最近拔掉了我從中獲得MPW工具的FTP服務器的插頭,所以它可能不再可用了; 雖然谷歌搜索“MPW_GM.img.bin”確實找到了一些替代方案)。

事實證明,它並不太復雜。 “數據結構”只是一個過渡向量。

由於我的重定位虛擬機實現中的錯誤導致這兩個指針看起來像垃圾,我沒有立刻意識到它。

轉換向量是包含(按此順序)入口點(4字節)和“內容表”偏移量(4字節)的結構。 在執行入口點指向的代碼之前,應將此偏移量加載到寄存器r2

(Mac OS Classic運行時僅使用轉換向量的前8個字節,但它們在技術上可以是任何大小。轉換向量的地址始終在r12傳遞,因此被調用者可以訪問它所需的任何其他信息。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM