Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当经典MacOS进入程序时,68000堆栈上有什么?_Macos_Assembly_Calling Convention_68000 - Fatal编程技术网

当经典MacOS进入程序时,68000堆栈上有什么?

当经典MacOS进入程序时,68000堆栈上有什么?,macos,assembly,calling-convention,68000,Macos,Assembly,Calling Convention,68000,我试图理解一个古老的经典Mac应用程序的入口点。我已经反汇编了第一个代码资源(不是代码#0,它是跳转表)。代码引用了堆栈外的一些变量:0004(A7)处的一个单词,从000C(A7)开始的一个长单词数组,其长度是0004(A7)处的值,以及超出该数组的最后一个长单词,似乎是指向字符串的指针 长单词数组乍一看像字符串,所以表面上看起来像是在处理(int-argc,char**argv)情况,除了“argv”数组在堆栈框架中是内联的 当一个程序第一次被Mac OS调用时,它的堆栈/寄存器上应该有什么

我试图理解一个古老的经典Mac应用程序的入口点。我已经反汇编了第一个代码资源(不是代码#0,它是跳转表)。代码引用了堆栈外的一些变量:0004(A7)处的一个单词,从000C(A7)开始的一个长单词数组,其长度是0004(A7)处的值,以及超出该数组的最后一个长单词,似乎是指向字符串的指针

长单词数组乍一看像字符串,所以表面上看起来像是在处理(int-argc,char**argv)情况,除了“argv”数组在堆栈框架中是内联的


当一个程序第一次被Mac OS调用时,它的堆栈/寄存器上应该有什么期望?

从内存中我认为当你的代码资源第一次被调用时,堆栈上没有任何有趣的东西。经典Mac OS没有使用argc/argv。虽然已经很久了,所以我可能是错的,几年前我扔掉了所有旧的Mac内部卷,所以我无法轻松检查。

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

(推测:
argv
数据实际上可能在堆栈上。将命令行拆分为多个部分的一个明显方法是从末尾开始,而不是从开头开始。向后走命令行(使用
-(An)
寻址模式)这样做可能会使事情变得复杂一些,但68000可以将即时值与内存进行比较,因此检查\之类的内容(如果Mac OS这样做的话)并没有太大的麻烦。一旦找到了一个片段的开头,就把它的地址放在堆栈上——你可能已经准备好了开头(由于预加密)但是
PEA
在任何情况下都会使这变得很容易——并在其末端插入一个0来终止它。一旦所有指针都被按下,加载程序就可以执行
MOVEA.la7,-(A7)
PEA A7
来按下
argv
指针


(如果您对其进行编码,这可能会非常有效,因此如果它是实际采用的方法,我也不会感到惊讶。)

感谢您的指点,Martin。但是,MacOS比Linux早了好几年,而且肯定不是基于Unix运行时(“资源和数据分叉”,有人吗?)。我正在查看的代码几乎与Unixy argc,argv输入约定不太相似。感谢链接,它将变得非常方便。唉,我在查看错误的代码时认为它是入口点;它似乎是一些硬代码手写汇编程序片段,可以巧妙地处理字符串数组,是的,似乎是wholly在堆栈上。@John:请特别注意。也许您看到的是C运行时库,它构造了一个argc和argv.Link,不幸的是,现在断开了。事实上,在进入MacOS经典二进制文件时,似乎只有A5指向“A5世界”。我正在查看代码段1中的第一个代码,它与存储在代码段0中的跳转表中的第一个条目引用的代码不同。感谢您的帮助。啊,是的-A5 world-QuickDraw globals和您的程序globals-我忘记了这一点。