我正在学习asm,所以我也在阅读Linux amd64 ABI,我注意到计算机系统:程序员的视角(CSAPP)有相同的内容(堆栈帧布局)。我发现栈帧布局是不同的,它们的返回地址被划分为不同的位置。CSAPP代码似乎是在英特尔x86_x64上设置的(这是IA-64吗?)
下面是amd64堆栈帧布局,3.2.1寄存器和堆栈框架

下面是CSAPP堆栈框架布局。

我假设英特尔的x86_x64是IA-64,所以我检查了Linux核心IA-64 ABI,并找到了下面的图片.

我发现CSAPP描述了数据传输。
当一个函数有六个以上的整数参数时,其他的参数被传递到堆栈中。假设过程P用n个整数参数调用过程q,使得n> 6。那么P的代码必须为参数7到n分配足够存储空间的堆栈帧。
没有办法通信,我不太明白为什么会有区别。也许我找错文件了。
更新:我知道amd64不是IA-64,也知道IA-64是英特尔的Itanium。我在问问题之前看了一点维基。我认为CSAPP是在Linux环境中,所以我应该阅读Linux,但是官方文档提供的体系结构列表不包含英特尔x86_64,所以我假设英特尔x86_x64是IA-64。对不起,我是新手。我想知道CSAPP的堆栈框架布局,我想我将使用类似Unix的架构,所以我应该学习哪种体系结构。

发布于 2022-06-16 21:28:18
没有办法通信,我不太明白为什么会有区别。也许我找错文件了。:-)
这里有多达5种不同的呼叫约定:
"csapp堆栈框架布局“没有红色区域,因此它必须是其他可能性之一。我假设微软的x64调用约定是最有可能的(图中的“保存寄存器”是32字节的“影子空间”);由于用户空间应用程序比内核空间代码更有可能使用80x86,所以有一个“不调用约定,每个函数都做它喜欢的事情”的图表是没有意义的。
https://stackoverflow.com/questions/72649142
复制相似问题