#x86-64 #abi
#x86-64 #abi
Вопрос:
В каком порядке аргументы x64 помещаются в стек:
- в системе V ABI?
- в Windows ABI?
Я пишу библиотеку Java FFI, которая использует динамически генерируемые заглушки, и эти заглушки зависят от этого порядка.
Я подозреваю, что он «плавает первым», но не уверен.
Комментарии:
1. Вы знаете, что аргументы также передаются в регистрах? Не только в стеке?
2. @jcoder Да, это так. Я уже обработал случай всех целочисленных аргументов в регистрах.
3.Не знаю System V ABI, но IIRC, в Windows 64 регистры с плавающей запятой передаются в
xmm0
доxmm3
вместоrcx
,rdx
,r8
иr9
, поэтому, если аргументы есть(int, double, int, double)
, они передаются вrcx
,xmm1
,r8
иxmm3
соответственно. Остальное, если таковое имеется, передается в стек, как описывает @MargaretBloom в своем ответе.
Ответ №1:
Из System V ABI, раздел 3.2.3:
После назначения регистров аргументы, переданные в память, помещаются в стек в обратном (справа налево) порядке.
Windows x64 ABI очень неформальный, и он не определяет порядок параметров стека.
Однако из Википедии и здравого смысла мы можем прийти к тому же выводу, что и выше:
Дополнительные аргументы помещаются в стек (справа налево)