Rom*_*aka 5 c arrays x86-64 calling-convention
我正在阅读System V应用程序二进制接口,有一部分是我无法理解的.
首先,该文件指出
没有尝试为C以外的语言指定ABI
(第10页).
稍后,在第20页,数组分为MEMORY,POINTER等:
聚合(结构和数组)和联合类型的分类如下:
...
然后使用分类来定义调用约定 - 它们的值和边界如何传递给函数并从函数返回.如果我正确读取算法,则可以将数组分类为INTEGER,MEMORY或SSE.
但是在C语言中,数组总是作为指针传递和返回.那么为什么对数组进行分类以及在哪种情况下数组类很重要呢?
我发现:如果数组是结构或联合的一部分,它可以在寄存器中传递。
这段C代码
#include <stdint.h>
struct somebytes {
uint8_t bytes[8];
};
uint8_t plus(struct somebytes p) {
return p.bytes[3]+p.bytes[5];
}
Run Code Online (Sandbox Code Playgroud)
翻译成这个程序集:
mov %rdi,%rax
shr $0x28,%rdi
shr $0x18,%rax
add %edi,%eax
retq
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
109 次 |
最近记录: |