Joh*_*lén 13 macos assembly 68000 calling-convention
我试图了解旧的经典Mac应用程序的切入点.我已经反汇编了第一个CODE资源(不是CODE#0,它是跳转表).代码引用堆栈外的一些变量:0004(A7)处的一个字,一个从000C开始的长字数组(A7),其长度是0004(A7)处的值,以及超出该数组的最后一个长字似乎是一个指向字符串的指针.
长字的数组看起来像字符串乍一看,所以它看起来像我们处理(int argc,char**argv)情况,除了"argv"数组在堆栈框架中内联.
当程序首次被Mac OS调用时,程序应该在其堆栈/寄存器上期待什么?
小智 5
我不知道它是否有用(我只看了这个问题,因为它在标题中有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指针.
(如果您编写代码,这可能会很好,所以如果实际采用的方法不会让我感到惊讶.)
根据记忆,当您的 CODE 资源第一次被调用时,我认为堆栈上没有任何有趣的东西。经典 Mac 操作系统不使用 argc/argv。不过已经过去很长时间了,所以我可能是错的,几年前我扔掉了所有旧的 Inside Mac 卷,所以我无法轻易检查。
| 归档时间: |
|
| 查看次数: |
563 次 |
| 最近记录: |