Viktor
Попробуй ради интереса эти регистры сначала занулить
Aiwan \ (•◡•) / _bot
нет
Aiwan \ (•◡•) / _bot
cinvoke wsprintf,readBuf,mes1,\ [lpConsoleScreenBufferInfoEx.cbSize],\ [lpConsoleScreenBufferInfoEx.dwSize.x],\ [lpConsoleScreenBufferInfoEx.dwSize.y],\ ...
Viktor
А просто u/d нормально работают? Что насчёт hx?
Aiwan \ (•◡•) / _bot
mes1 du 'Размер структуры cbSize %lu',13,10,\ 'Размере буфера dwSize %hu','x','%hu',13,10,\ 'Координаты курсора dwCursorPosition %hd,%hd',13,10,\
Viktor
А это вообще нормально что в masm все в квадратных скобках?
Viktor
Странный он какой-то
Aiwan \ (•◡•) / _bot
fasm
Viktor
неправильно u\d
Для dword'ов
Viktor
fasm
Хм, не различаю их :(
Aiwan \ (•◡•) / _bot
а для вордов что тогда?
Viktor
Это чтобы проверить
Viktor
Попробуй ещё для интереса убрать cbSize
Viktor
Но вообще странно, "должно работать" (c)
Aiwan \ (•◡•) / _bot
работает тлько с %hd, я так понимаю это и есть норма
Viktor
Так hx тоже некорректно работает?
Aiwan \ (•◡•) / _bot
я непойму пойму почему при числе 120 знаковое и безнаковая маска дает разные результаты
Viktor
Так hx тоже некорректно работает?
(в 16ричной без 0x выводит)/
Aiwan \ (•◡•) / _bot
Так hx тоже некорректно работает?
мне щас только десятичное надо, hex потом
Viktor
Да это чтобы проверить
Aiwan \ (•◡•) / _bot
Так hx тоже некорректно работает?
это черех %hx, воде шестнадцатеричное, но вот только не от 120 первое значение
Viktor
Но вообще u по идее должно давать результат отличный от d только на отрицательных числах, так что очень странно
Viktor
А ты уверен, что там 120?
Aiwan \ (•◡•) / _bot
это %hd
Aiwan \ (•◡•) / _bot
это %hu
Aiwan \ (•◡•) / _bot
🦥Alex Fails
а к чему вопрос?
Да выложил бы весь код
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
но там в инклуд kerenel32.inc надо сточку добавить с функцие GetConsoleScreenBufferInfoEx, ее там нет
Aiwan \ (•◡•) / _bot
там только младшая фунция, без Ex
Aiwan \ (•◡•) / _bot
мои вопросы наверное иногда ставят в тупик
🦥Alex Fails
Да я знаю это апи. Более того,я юзал недокументированную версию соседнего апи, которое устанавливает инфо о буфере, чтобы рисовать 2д-графон в консоли))
Aiwan \ (•◡•) / _bot
у мя более простая задача
Aiwan \ (•◡•) / _bot
изменить размер окна и буфера через эту структуру, чтоб негородить условия зависимости изменеия окна и буфера
🦥Alex Fails
Так там не сложно ж
Aiwan \ (•◡•) / _bot
Так там не сложно ж
...и попутно разбираюсь в нюансах и тонкостях
Aiwan \ (•◡•) / _bot
а можно и через структуру вроде, по крайней мере хочу попробовать
Aiwan \ (•◡•) / _bot
заполняю структуру через GetConsoleScreenBufferInfoEx, меняю необходимые поля, и отпраляю структуру в систему тем самым меня нужные мне координаты
s54820
это %hd
Интересно. Сложно сказать, что из этого всего сломано. С одной стороны, cinvoke и ccall в фасм кладут word в стек именно как word, не затирая старших битов аргумента (а там как раз остатки былого праздника). С другой стороны, wsprintf почему-то не задумываясь читает аргументы целым dword (или qword), не обнуляя после этого старшие биты. При этом, например, printf в Си таким не страдает и работает, как ожидается. В 32-битном коде, кстати, та же проблема. И я как-то даже не могу придумать, где посмотреть такие тонкие детали про конвенции вызова. Думаю, что не прав всё же фасм.
🦥Alex Fails
Над реверсить сишный код вызова спринтфа и смотреть, как в нем пушится (емним там по размеру пойнтера)
електр🟢нік ✙🟠рчбеч ඞ
годболт в помощь?
Aiwan \ (•◡•) / _bot
я буду использовать %hd
Aiwan \ (•◡•) / _bot
с ним вывод правильный
s54820
Над реверсить сишный код вызова спринтфа и смотреть, как в нем пушится (емним там по размеру пойнтера)
Если говорить про variadic-функции, то они могут надеяться на integer promotions, и поэтому им позволено ожидать (и брать из va_list) int вместо short. Ну а если у нас обычный fastcall и аргумент типа uint8_t какого-то, должны ли быть верхние биты rcx нулевыми?
Aiwan \ (•◡•) / _bot
имеет ли значение что у меня юникод?
s54820
имеет ли значение что у меня юникод?
Нет, тут проблема глубже. Имеет значение, что фасм кладет ворд как есть, а не делает movzx. И заодно имеет значение то, что в 32-битном коде это бы не скомпилировалось, потому что в 32-битном cinvoke явно делается pushd, перекладывая проблему на твои плечи, а вот в 64-битном cinvoke делаются mov в стек, которые вполне счастливы делать это с word.
Aiwan \ (•◡•) / _bot
и еще вопрос как вывести 4 байта маской в hex. %x - неправильно, %hx - неправильно, %lx - неправильно, а вывожу это ...
s54820
Почему %x неправильно?
Aiwan \ (•◡•) / _bot
sek
Aiwan \ (•◡•) / _bot
mes2 du 'Настройки цвета консоли ColorTable',13,10,\ '[0]=%x ','[1]=%x ','[2]=%x ','[3]=%x ','[4]=%x ','[5]=%x ','[6]=%x ','[7]=%x ',13,10,\ '[8]=%x ','[9]=%x ','[10]=%x ','[11]=%x ','[12]=%x ','[13]=%x ','[14]=%x ','[15]=%x ',0 mes2Len = ($-mes2)/2 ... ... cinvoke wsprintf,readBuf,mes2,\ [lpConsoleScreenBufferInfoEx.ColorTable+4*0],\ [lpConsoleScreenBufferInfoEx.ColorTable+4*1],\ [lpConsoleScreenBufferInfoEx.ColorTable+4*2],\ [lpConsoleScreenBufferInfoEx.ColorTable+4*3],\ [lpConsoleScreenBufferInfoEx.ColorTable+4*4],\ [lpConsoleScreenBufferInfoEx.ColorTable+4*5],\ [lpConsoleScreenBufferInfoEx.ColorTable+4*6],\ [lpConsoleScreenBufferInfoEx.ColorTable+4*7],\ [lpConsoleScreenBufferInfoEx.ColorTable+4*8],\ [lpConsoleScreenBufferInfoEx.ColorTable+4*9],\ [lpConsoleScreenBufferInfoEx.ColorTable+4*10],\ [lpConsoleScreenBufferInfoEx.ColorTable+4*11],\ [lpConsoleScreenBufferInfoEx.ColorTable+4*12],\ [lpConsoleScreenBufferInfoEx.ColorTable+4*13],\ [lpConsoleScreenBufferInfoEx.ColorTable+4*14],\ [lpConsoleScreenBufferInfoEx.ColorTable+4*15]
Aiwan \ (•◡•) / _bot
и табуляция смущает еще, откуда она?
Aiwan \ (•◡•) / _bot
ладно, я спать, днем разберемся как нить
Aiwan \ (•◡•) / _bot
вроде полегчало
Aiwan \ (•◡•) / _bot
s54820
вроде полегчало
Ну или так, да.
Aiwan \ (•◡•) / _bot
значит мож и там выше также сделать в зависимости от размера поля
Aiwan \ (•◡•) / _bot
вот на данный момент послений вариант, мож кто поэксперементирует
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
s54820
значит мож и там выше также сделать в зависимости от размера поля
Не совсем понял, о чём ты, но скорее нет. Тут у тебя были дворды, просто ты объявил их как байты, и поэтому фасм пихал байты. А если ты про %hu, то там ворды, и фасм пихает ворды. От явного указания размера они в дворды сами не превратятся.
Aiwan \ (•◡•) / _bot
там только 1 дворд - это первй параметр, я его указал как %lu, остальные почти все просто word
Aiwan \ (•◡•) / _bot
щас воторую часть надо оформить
Aiwan \ (•◡•) / _bot
я спать
Aiwan \ (•◡•) / _bot
теперь такая трабла, почему не до конца строка выводится?
­
Теребишь сильно.
Aiwan \ (•◡•) / _bot
чт ты имеешь ввиду?
Aiwan \ (•◡•) / _bot
на данном этапе пока так
­
чт ты имеешь ввиду?
Сообщение своё перечитай.
Aiwan \ (•◡•) / _bot
ааа
Yura
ааа
а что кстати исопльзуешь для ввода-вывода в фасме? виндовые функции для консолей?