там оно не от rsp отсчитывает. Слей локально хоть какой то адрес на стеке, например это будет %10$p и там будет лежать число 1337
Если еще точнее, то там выходит так, что первые несколько значений это регистры rdi rsi и т.д., потом с большой вероятностью лежит указатель на va_args, который используется vaprintfом, с некой вероятностью еще лежит адрес ретурна в printf (в зависимости от реализации либо jmp либо call vaprintf) и дополнительно еще почти всегда лежит либо указатель на IO stdin или stdout (что тоже можно использовать и гораздо проще чем libc start main ибо можно вообще мозг не включать а сдампить первые 6 адресов и забить в блюкат а потом смотреть более точно при необходимости) и всё это выходит в примерно 6-8 доп. переменных размером 8 байт, поэтому если посчитал что оффсет до ретурна это 17, то прибавляешь 6 и выигрываешь