首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >amd64与Intel x86-64栈帧的区别

amd64与Intel x86-64栈帧的区别
EN

Stack Overflow用户
提问于 2022-06-16 16:35:12
回答 1查看 291关注 0票数 -1

我正在学习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的架构,所以我应该学习哪种体系结构。

EN

回答 1

Stack Overflow用户

发布于 2022-06-16 21:28:18

没有办法通信,我不太明白为什么会有区别。也许我找错文件了。:-)

这里有多达5种不同的呼叫约定:

  • 系统V AMD64 ABI,其中包括一个红色区域。
  • 用于x86_64的Linux内核ABI;它是System AMD64 ABI,但没有任何红色区域。
  • Microsoft x64调用约定;它具有“阴影空间”(且没有红色区域)
  • 无论Linux在Itanium上使用什么(这与x86_64无关)。
  • 以上都不是。对于纯程序集,您不必遵守任何ABI (除非调用共享库或用另一种语言编写的东西)。

"csapp堆栈框架布局“没有红色区域,因此它必须是其他可能性之一。我假设微软的x64调用约定是最有可能的(图中的“保存寄存器”是32字节的“影子空间”);由于用户空间应用程序比内核空间代码更有可能使用80x86,所以有一个“不调用约定,每个函数都做它喜欢的事情”的图表是没有意义的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72649142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档