Некоторые апи функции l2 идут с неопределенным количеством аргументов, в частности sendpacket. Переменные параметры заносятся в стек. Но до них идет указатель на строку с маской(format)(пример "cdddbSqq"). По ней мы бьем стек и получаем те самые параметры.
А как корректно рассчитать смещение по маске:
c - 1 байт, но в стеке занимает 4 байта(можно же было в 2 уложить)
d - 4 байта, в стеке 4 (тут и вопросов нет)
h - 2 байта, а сколько занимает в стеке?
q - 8 байт, а в стеке тоже 8?
Но больше всего не понятно, сколько байт в стеке занимает b и S(S - указатель или сама строка(unicode же?)? за что отвечает b? (байты?))
Те, к примеру, [esp+24] - указатель на строку с маской(форматом). 1 символ маски всегда c => после mov al, [esp+28] в al у нас будет первый байт. Если второй символ d => mov eax, [esp+32] в eax будет 4 байтное число. А как эта цепь продолжится для h, b, S?
В c++ есть va_arg, а здесь чуть сложнее. Хотя я нашел что-то мне подходящее более менее на delphi+asm вот в
этом треде, но не уверен, что это верный вариант.
Есть ли более точный способ разбить стек?