gpt4 book ai didi

ARM 中基于堆栈的结构的调用约定?

转载 作者:太空宇宙 更新时间:2023-11-04 01:12:45 25 4
gpt4 key购买 nike

如何将基于堆栈的结构传递给 ARM 汇编中的子例程?

例如:

typedef struct SomeStruct { 
uint32_t one;
uint32_t two;
uint32_t three;
uint32_t four;
} SomeStruct;

void SomeFunction(uint32_t someValue, SomeStruct someStruct, uint32_t otherValue);

在这种情况下,结构将如何传递?我的猜测是:

  • r0 - someValue
  • r1 - someStruct.one
  • r2 - someStruct.two
  • r3 - someStruct.three
  • *sp - someStruct.four
  • *sp,#4 - 其他值

这是正确的还是发生了其他事情? 或者它只是传递了结构的 sp 基础地址?

最佳答案

这里有一个 ARM ABI 的“过程调用标准”:http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/IHI0042D_aapcs.pdf

ARM 的 ABI 不止一个,64 位 ARM 的 ABI 也不止一个,但只看这个,相关部分是“5.5 参数传递”。乍一看,我认为 C.5 说你是对的,这个结构将在 r1-r3 和堆栈之间拆分。

B.1,它可以用指向内存中副本的指针替换复合类型的参数,在 C 中永远不会应用,因为调用者和被调用者都必须具有 SomeStruct 作为顺序的完整类型按值传递。

关于ARM 中基于堆栈的结构的调用约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8419166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com