Aiwan \ (•◡•) / _bot
да
Aiwan \ (•◡•) / _bot
WriteConsole
Aiwan \ (•◡•) / _bot
в длине строки проблема, она вычисляется на этапе компиляции, а в коде изза того что мы использвем маску, в тех местах выводится больше символов
Aiwan \ (•◡•) / _bot
значит надо считать длину стоки програмно до завершающего нуля
s54820
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
но вопрос с %hd %hu остается открыт
Aiwan \ (•◡•) / _bot
Viktor
s54820
но вопрос с %hd %hu остается открыт
Ну мы же вчера все выяснили. Хочешь печатать шорты так, чтобы не обижать wsprintf — делай movzx/movsx в полноценный dword и клади в аргументы уже его.
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
ща поробую написать костыль
Aiwan \ (•◡•) / _bot
чтоб неуходить от макроса cinvoke и вывод был правльный
Aiwan \ (•◡•) / _bot
там просто надо занулить область памяти куда кладутся параметры, иногда там остается мусор после выполнения предыдущих функций
Aiwan \ (•◡•) / _bot
и %hu будет работать правильно
s54820
s54820
Можно считать так: wsprintf написан на Си и предназначен для Си. В Си для функций с переменным числом аргументов делаются argument promotions, превращающие в том числе и short в int. wsprintf закладывается на цитату с картинки. А у тебя в старших битах int мусор, вот и получается, что получается.
Aiwan \ (•◡•) / _bot
пора писать томашу
s54820
Нет, тут проблема глубже. Имеет значение, что фасм кладет ворд как есть, а не делает movzx. И заодно имеет значение то, что в 32-битном коде это бы не скомпилировалось, потому что в 32-битном cinvoke явно делается pushd, перекладывая проблему на твои плечи, а вот в 64-битном cinvoke делаются mov в стек, которые вполне счастливы делать это с word.
Aiwan \ (•◡•) / _bot
так если в данных у мя 2а байта смысл мне передавать 4?
Aiwan \ (•◡•) / _bot
Нет, тут проблема глубже. Имеет значение, что фасм кладет ворд как есть, а не делает movzx. И заодно имеет значение то, что в 32-битном коде это бы не скомпилировалось, потому что в 32-битном cinvoke явно делается pushd, перекладывая проблему на твои плечи, а вот в 64-битном cinvoke делаются mov в стек, которые вполне счастливы делать это с word.
так я вот и говорю, костыл на зануление места под параметры, но считать байтики вручную надо
Aiwan \ (•◡•) / _bot
или вообще свою функцию писать вывода на экран
Ask
айва, а че не получается у тя?
Aiwan \ (•◡•) / _bot
айва, а че не получается у тя?
уже получилось, но а если глубже в проблему взглянуть то надо переписать макрос cinvoke в фасме чтоб он занулял область стека от мусора,куда в дальнейшем будут класться параметры, и не забывать про r-регистры.
Aiwan \ (•◡•) / _bot
или как говорили выше - использовали внутри не mov а movsx при складывании параметров в стек
Yura
Кстати, тут недавно наткнулся на статью, что компиляторы не такие уж и жёсткие в плане оптимизации. И что про то что на асме можно писать гораздо оптимизированнее. Что об этом думаете? Насколько высокоуровневые грамматические анализаторы реально хороши?
Ask
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
вроде
Aiwan \ (•◡•) / _bot
он разве незануляет?
он передает параметры так как в нем и заложено, а wsprintf в си расширяет параметр до 4 байт
Aiwan \ (•◡•) / _bot
... а не использует то что ему дали, 2 байта
Ask
пример кинь в личку)
🦥Alex Fails
годболт в помощь?
/godbolt
#include <stdio.h>
int testprintf() {
int value = 15;
char buf[20];
sprintf(buf, "%d", 15);
}
🦥Alex Fails
хм. тут моего бота нет. Куда он делся
🦥Alex Fails
.LC0:
.string "%d"
_Z10testprintfv:
push rbp
mov rbp, rsp
sub rsp, 32
mov DWORD PTR [rbp-4], 15
lea rax, [rbp-32]
mov edx, 15
mov esi, OFFSET FLAT:.LC0
mov rdi, rax
mov eax, 0
call sprintf
nop
leave
ret
електр🟢нік ✙🟠рчбеч ඞ
он умеет в флаги компилятора?
🦥Alex Fails
можно научить
🦥Alex Fails
я позже этим займусь, напомните мне через две недели примерно, пожалуйста
електр🟢нік ✙🟠рчбеч ඞ
и в переключение синтаксиса
електр🟢нік ✙🟠рчбеч ඞ
ок
MrSmith
🦥Alex Fails
Иван
Всем привет, кто нить вкурсе как распаковать exe с Themida?
Эээ, стоп! @AlexFails групбаттлерреборн не настроенный?
🦥Alex Fails
gbdummy2_bot настроен же
Иван
Та нет, просто интересно стало, есть игруха одна под debug пишет что мол Themida обнаружила х...ню (L2phx) и вот подумал а есть ли распаковщики
🦥Alex Fails
можно пошерстить какой-н tuts4you
gbdummy2_bot настроен же
Я вчера тоже смотрел настройки, всё было включено. Единственное, конфиг антифлуда поправил малость.
Иван
искал, не помогло, и дампинг снять не смог
dukeBarman
Вирусню пилишь?
у них какое-то сезонное обострение :) уже не первый человек ищёт как Темиду снять
🦥Alex Fails
случаем, не от эпик геймов? тут чувак говорил (если я не ошибаюсь), что они юзают темиду
Иван
Я иногда играю в свободное время но хочется ломануть игрулю, но вот тем по избавлению от темиды так и не нашёл + там фрост
dukeBarman
Nikolai
Nikolai
банально, пишешь на опенсв прогурмульку для детекта хп в игре) Как только там уровень падает - эмулируешь нажатие на одну из фок, где у тебя есть хилка. Но блин, и это лочится.
Иван
Фрост меня особо не беспокоит, мне бы игрулю от тимиды избавить
Vladimir
Nikolai
Что за птичий язык?
Христианская Сишечка, есть еще реализация на питоне, но я плохо знатю это)
kitsu
А бывают для 32-битных x86 процессоров расширения AVX (именно оно, не SSE)?
Vladimir
Vladimir
Vladimir
Даже на атомах и целеронах есть x86-64. AVX там нет
dukeBarman
kitsu
Можно как-нибудь в gdb (ну lldb в целом тоже сойдет) показать diff для переменной для двух стейтов?
e.g
gdb$ p a
$1 = {
b = 2,
c = 3,
}
gdb$ c
$ p a
$2 = {
b = 3,
c = 3,
}
gdb# diff $1 $2
- b = 2,
+ b = 3,
kitsu
ну, прям такая команда конечн вряд ли есть, но мб есть способы для достижения этого результата
kitsu
как я понял логгинг не очень заходит с интерактивной отладкой
Ned
народ
Ned
скиньте что-нить по gdb или lldb
Ned
я напрочь не умею отлаживаться
kitsu
и вот это
https://github.com/longld/peda
Ned
а есть вообще смысл осваивать гдб, если есть ллдб?