Egor
И так далее.
Egor
По смыслу-то там что-то очень-очень простое происходит, только инструкции слишком низкоуровневые
Matwey
там математика
Egor
Чтобы понять, что делает конкретная инструкция, надо загуглить. Или простись ассемблерным отладчиком по коду и смотреть на регистры.
Matwey
просто сложения вычитания умножения
Egor
Ну, да
Matwey
я не хочу гуглить 80 килобайт асемблерного листинга
kitsu
hex-rays
kitsu
На торрентах есть под винду, прекрасно работает под вайном
Matwey
hex-rays
Так я сегодня днем и подумал, как правильно сказали "что-то простое". и решил применить опенсорсный snowman
Matwey
Ну, раз "простое", то доллжен справиться
kitsu
fpu сложненько декомпилить, snowman не справится
kitsu
ну, впрочем ты и так уже знаешь
Александр
Блин, так хочется оффтопнуть по fpu и реверсу
Александр
Хотя это не реверс. Вопрос: может ли функция портить fpu стек и за собой не чистить? x86
Egor
Зависит от ABI. На x86 их вроде пруд пруди.
Egor
Скажем, fastcall, stdcall, cdecl, pascal... Да и на x64 три штуки минимум
Egor
Да, sorry
kitsu
вообще мне казалось на amd64 их меньше
kitsu
win & system v
Egor
У system v ещё, кажется, есть разновидность под названием "32-битные указатели в 64-битном приложении"
Александр
Скажем, fastcall, stdcall, cdecl, pascal... Да и на x64 три штуки минимум
Они влияют на чистку обычного стека, как я знаю. Здесь спасает add esp, N
Александр
pushad call my_static_func_no_arg popad // здесь испортилось одно значение в fpu стеке И вот первый раз за несколько лет столкнулся с такой проблемой. Код asmjit'овский, если что, но сути не меняет.
Александр
То ли stdcall, то ли cdecl. Но без аргументов не важно, как мне известно.
Рома
else if(i > 100 && cells[i-1].mode == 1 && cells[i-100].mode == 1 ) { if((a1 = 1 + rand() % 12) != 1) { cells[i].DrawC(CP,CPP, WIDTH, HEIGHT,0,147,255,1); } }
Рома
по какой причине эта штучка может не выполнятся, если все условия соблюдены
Egor
Условия не соблюдены или есть undefined behavior.
Berkus
всё понятно стало!
ну он видимо FPU не умеет
Matwey
ну он видимо FPU не умеет
Уже поняли. А есть что-нибудь что умеет но не заденьги?
Berkus
Уже поняли. А есть что-нибудь что умеет но не заденьги?
не уверен. надо смотреть каждый по отдельности https://github.com/cea-sec/miasm ?
Олександр
@supapro
Alexander
просто чето ассемблер какой-то специфичиеский. эт че, контроллер какой-то?
Alexander
ааа
Alexander
блин
Alexander
fmul это же вроде x86 float mul
Matwey
это он и есть
Matwey
x87
Alexander
умножение двух float' ов
Alexander
походу дела)
Anonymous
Так просто, что даже неудобно за такую длинную дискуссию, которая тянулась до этого 🤦🏼‍♂️
Matwey
так это самое. у меня такого "просто" еще 80 килобайт текста
Matwey
кто возьмется всё обработать?
Anonymous
Ну жизнь не праздная греза))) удачи)))
Alexander
кто возьмется всё обработать?
а тебе че надо то? понять что делает ассемблер или что?
Matwey
а тебе че надо то? понять что делает ассемблер или что?
типа того, мне надо формулы в человеческом виде посмотреть
Berkus
типа того, мне надо формулы в человеческом виде посмотреть
https://www.scribd.com/document/12959975/ASM-to-C-Translation-Table тут вот есть какой-то гайд, можешь по нему написать тулзу)
Alexander
а ну дак садись и разматывай каждую фунцию такую, выписываю в отдельный файл, лучше так же в ассемблере, компилурий и сравнивай результаты. а так хз даже че еще посоветовать - реверс инженрирнг как бе не очень приятная работа
kitsu
Тип дефолтного аргумента всегда должен иметь определенный operator=?
Berkus
эээ нет, не должен
Berkus
конструктор перемещения по идее предподчтительней
Andrii
А вообще, при перегрузке операторов допустимы любые прототипы или нет?
Berkus
у операторов есть канонические формы, но принимаются иногда "совместимые" вольности
Berkus
типа передать аргумент по значению а не по константной ссылке
Andrii
а где можно посмотреть канонические формы для всех операторов?
Alexander "SonnySlave"
а где можно посмотреть канонические формы для всех операторов?
глянь также в кор гайдлайны - мб там что-то есть полезное
kitsu
Есть множество функций, которые отличаются одной лишь строкой Можно ли как-то обобщить это дело темплейтами? Пока остановился на этом: https://ideone.com/qFOlPA
Egor
А зачем шаблоны, если можно просто вынести пролог и эпилог в отдельные функции?
Egor
Или наоборот — вынести общую часть в отдельную функцию, которая принимает функтор и вызывает его внутри себя. Если функтор сделать шаблонным параметром (а не std::function), то наверняка даже заинлайнится
kitsu
Или наоборот — вынести общую часть в отдельную функцию, которая принимает функтор и вызывает его внутри себя. Если функтор сделать шаблонным параметром (а не std::function), то наверняка даже заинлайнится
да, про функтор и в правду не подумал, спасибо А если из любопытства остановиться на прошлом способе, у него есть решение, пусть даже нетривиальное?
Egor
А что за прошлый способ? Я не очень понял, что там в коде подразумевалось
Igor
вопрос к кланго-боярам, с претензией на супапро куда пнуть clang-format, чтобы он перестал вытворять вот такую дичь? https://puu.sh/yA4uX/1f9aa2df3f.png при этом если ColumnLimit > 0, то он их вообще начинает в одну строку выстраивать, игнорируя все переносы
Igor
если вызвать форматтер вручную и открыть блокнотом, получится то же самое, куча табов + пробелы в конце
Ivan
если вызвать форматтер вручную и открыть блокнотом, получится то же самое, куча табов + пробелы в конце
Ну форматтер показывает результат валидатора какого-то внутреннего так?
Ivan
Он регулярками парсит наверное хз и чекает
Igor
я к тому что, студия тут вообще на форматирование не влияет, это какие-то кланговские закидоны
Ivan
А раз регулярками литералы могут быть разные, соотв-нео в настройках студии если таб принять за 2 пробела например мб ок будет?
Ivan
Просто догадки
Ivan
Хотя это принципиально странно
Ivan
Ибо количество пробелов
Ivan
Не влияет, токенайзер все равно на этапе компиляции убирает же их
Igor
ещё раз, проблема в том что кланг-формат по какой-то своей причуде решает, что строки с b и d нужно ВНЕЗАПНО выровнять с предыдущими, хотя там должен быть ровно один таб при этом строки с a1, a2, e, f форматируются норм не исключаю, что это какой-то баг моей версии, но под рукой только один комп с виндой, сравнить не с чем