Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
 
 
Опции темы Опции просмотра
Старый 28.11.2016, 20:20   #1
Новичок
 
Регистрация: 14.11.2016
Сообщений: 8
Сказал Спасибо: 4
Имеет 2 спасибок в 1 сообщении
fastx пока неопределено
По умолчанию va_arg на asm (разбив стека по format)

Некоторые апи функции 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 вот в этом треде, но не уверен, что это верный вариант.
Есть ли более точный способ разбить стек?
fastx вне форума   Ответить с цитированием
 

  CoderX :: Forums > Основные форумы > Программинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 16:39.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!