我试图了解一个旧的经典Mac应用程序的入口点。我已经分解了第一个代码资源(不是代码#0,这是跳台)。该代码指的是堆栈中的一些变量:一个单词为0004(a7),一个长的始于000C(a7)的长词,其长度为0004(a7),而最终的长词超出了该数组似乎是指向字符串的指针。

乍一看,一系列长词看起来像字符串,因此看起来像我们正在处理(int argc,char ** argv)情况,除了“ argv”阵列在堆栈框架中是内联的。

当Mac OS首次调用该程序时,该程序在其堆栈 /寄存器上应该期望什么?

有帮助吗?

解决方案

从内存来看,当您的代码资源首先调用时,我认为堆栈上没有任何关注的内容。 Classic Mac OS不使用ARGC/ARGV。这是一个 不过时间,所以我可能错了,几年前我把所有旧的内部Mac量都扔掉了,所以我无法轻易检查。

其他提示

我不知道是否有任何用途(我只看了这个问题,因为标题中有68000个……!)但是,你们olde Mac开发信息似乎在这里:

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

(猜想: argv 数据实际上很可能在堆栈上。将命令行分为部分的一种明显的方法是从结束而不是开始。向后走命令行(使用 -(An) 解决模式)并以此方式找到碎片。这可能会使事情变得有些复杂,但是68000可以将即时值与内存进行比较,因此检查等(如果Mac OS执行此操作)并不是很麻烦。一旦找到了一件开始的开始,就将其地址放在堆栈上 - 您可能有方便的(由于预言),但是 PEA 无论如何,这都会使它变得容易 - 并将0戳入其终止。一旦所有指针都被推,装载机就可以做 MOVEA.L A7,-(A7) 或者 PEA A7argv 指针。

(如果您对其进行编码,这可能会很好,因此如果实际采用的方法,我不会感到惊讶。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top