Как я могу получить доступ к неизвестному количеству параметров, переданных в стеке для вызова функции? - PullRequest
0 голосов
/ 19 октября 2019

Если я передаю неизвестное количество параметров в функцию (вроде как printf), как мне узнать, как далеко я должен идти, чтобы получить все параметры. Сначала я хотел сохранить разницу между% rbp и% rsp, чтобы получить смещение, но это не помогает, поскольку они инициализируются случайным образом во время выполнения из того, что я видел

С помощьюВ соглашениях о вызовах первые 6 аргументов передаются в регистрах, поэтому я должен поместить их в стек один раз в подпрограмме. Вопрос в том, как мне получить оставшиеся (n - 6) аргументы из стека, учитывая, что адрес возврата и базовый указатель были помещены в стек между аргументами. Функция выглядит примерно так:

.data
#variables here

main:

push arg_n
push arg_n-1
...
movq $arg_2, %rsi
movq $arg_1, %rdi
call ft_function

ft_function:

push %rbp
movq %rsp, %rbp

push %rdi
push %rsi
...
#Function code here
...
movq %rbp, %rsp
pop %rbp
ret
...