Задать вопрос
Ответы пользователя по тегу Assembler
  • Можно ли реализовать программу, написанную на C/assembler, которая отслеживает процесс запуска/работы вирус-майнера?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Чтоб не было создания велосипедов.

    По поводу детектирования. Есть статья на сайте МС под названием

    Defending against cryptojacking with Microsoft Defender for Endpoint and Intel TDT

    Приведу цитату

    Intel TDT applies machine learning to low-level hardware telemetry sourced directly from the CPU performance monitoring unit (PMU) to detect the malware code execution “fingerprint” at runtime with minimal overhead.
    ....
    This technology is based on telemetry signals coming directly from the PMU, the unit that records low-level information about performance and microarchitectural execution characteristics of instructions processed by the CPU. Coin miners make heavy use of repeated mathematical operations and this activity is recorded by the PMU, which triggers a signal when a certain usage threshold is reached.

    Вот почитай что такое Intel TDT, PMU e.t.c. Я думаю это будет правильное направление куда дальше искать.
    Ответ написан
    Комментировать
  • Как написать терминал на Assembler?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В github есть игрушечные проекты загрузчиков с консолью. Можно там посмотреть.
    Еще - статьи про 512-k boot loaders. Видел с вшитым интерпретатором Forth.
    Ответ написан
    Комментировать
  • Почему clang выдает такой ассемблерный код?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если - бы я был бизнесом и автор пришел бы ко мне с таким вопросом - я б спросил : как сильно
    влияет этот код на наш бизнес
    . И как много времени и сил мы хотим потратить на investigation
    этой проблемы.

    Я языках программирования и компилляторах всегда есть много забавных побочных эффектов. Но
    не все из них являются performance issue. Чтоб быть в фокусе. Обычно performance issues изучают
    в
    - циклах
    - векторизированных операциях
    - параллелизм и конкуренция в многопоточке
    - I/O

    Отдельно можно рассмотреть его величество алгоритм. Это тоже важно.

    Что мы имеем в данном примере? Ровно ничего. Совершенно софистический код, который не делает
    полезной работы и мы не можем никак оценить пользу или вред от оптимизаций. К слову если-бы
    инициализация Point стояла бы в теле цикла, то мне не составило-бы труда развалить ее на атомы
    (две переменных int) выполнить над ними все калькуляции и после выхода из цикла собрать снова
    эту-же структуру.

    Оценю в 1 story point вместе с тестами. И это будет дешевле по усилиям даже чем обсуждать этот
    вопрос в хабре. Грубо говоря вопрос будет закрыт даже не появившись.

    Автору еще посоветую посмотреть на GCC. И посмотрет на промежуточный LLVM код, который создает
    clang еще до ассемблера. Возможно это поведение там зафиксировано. Как особенность clang.
    Ответ написан
  • Как "склеить" два файла?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Самый простой вариант - редактирование сегмента данных не трогая код. Забиваешь
    нулями дополнительный резерв места в строке.

    section .data
        error_message db "Hello byte, hello word", 0, 0,0,0,0,0,0,0,0,0,0,0,0


    Потом в hex редакторе просто передвигаешь слово вправо не забывая что ASCIIZ строка обязательно
    должна закончистя нулем.
    Ответ написан
  • Актуален ли ассемблер на сегодняшний день?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Ассемблер полезен при анализе прошивок на безопасность.
    При изучении того как работает софт без исходного кода (обратный инжинеринг)
    и при решении задач интеграции разных слоёв софта.

    Ассемблер также очень близко стоит к разработке компилляторов. И если у вас нет
    соотвествующих знаний то строить свой компиллятор вы не сможете. Или вам нужно
    будет изучать готовые back-ends, virtual-machines.

    Ассемблер помогает при анализе узких мест в коде. В частности например
    векторизация вычислений ставит в первую очередь вопросы на которые ассемблер
    отвечает а ЯВУ - нет.

    Знания ассемблера помогают сделать бинарник компактнее. Это важно при разработке
    встраиваемых систем.
    Ответ написан
    Комментировать
  • Как установить флаги в debug.exe?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Спасибо что пригласил. Но я не большой специалист в ассемблере. Вот посмотри как тут пишут. Может поможет https://stackoverflow.com/questions/1406783/how-to...
    Ответ написан
    7 комментариев
  • Почему после ассемблера учить Си легче?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Есть две трудности с которыми сталкиваются студенты изучая С. Это адресная арифметика и работа со строками.
    Эти две темы зайдут легко если вы до этого уже знали Ассемблер.

    Но мне в общем кажется странным такая хронология изучения. Какой ВУЗ такое дает? Если вы до этого
    случайно знали Ассемблер - то это удивительный и исключительный факт. Насколько я знаю даже
    безопасники и системотехники не очень изучают asm. Я-бы сказал факультативно.
    Ответ написан
    Комментировать
  • Ошибка fasm ELF64 error: undefined symbol '_start', как мсправить?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вот тут опечатка.

    satrt:
    Ответ написан
    Комментировать
  • Как определить размер функции в байтах Машиного кода?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Такой функции скорее всего не существует. Тут как в парадоксе про пудинг. Чтобы узнать хороший он или
    нет - его надо сьесть. Вот чтобы узнать длину машинного кода нужно провести этот код по всем стадиям
    компилляции
    . А судя по внешнему виду это не С++. Это DotNet поэтому здесь будет минимум 2 стадии.
    DotNet => MSIL. И потом уже в машинный код. Подозреваю что длина машинного кода будет
    зависеть от версии DotNet, от разрядности платформы 32/64 и от целевой железной архитектуры
    Intel/ARM e.t.c.

    Вот такое получается уравнение со многими неизвестными. И его решить можно только практически.
    Компиллируем. Смотрим. Считаем. Если нудно считать - автоматизируем подсчет функции.
    Ответ написан
    Комментировать
  • Что можно написать новичку на асм?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если ты новичек - начни с простого. Когда я учился в универе - у меня был просто интерес написать
    графическую библиотеку для SVGA/VGA режимов графики. На дворе стояли 90-е и тогда не было
    никаких ускорителей и видяшки назывались S3/Trident. Вобщем сильно много я не написал.
    Было просто рисование цветных трапеций на экране. И это чудовищно непроизводительно для
    процесса разработки. Любой С++ ник заткнет тебя за пояс по скорости выкатки новых фич.
    А качество кода на выходе у gcc вполне себе хорошее чтобы не найти вообще кейсов где
    человек может лучше написать. Вообще в чем заключается оптимизация на асме? Держать
    в голове карту регистров и помнить какой из них под чего использован. Еще неплохо-бы
    помнить что у тебя в кешах лежит.

    Что еще из простого. Попробуй реши квадратное уравнение на FPU и на SSE. Это разные
    техно-стеки и будет познавательно сравнить какой способ лучше или удобнее.
    FPU - это легаси но он еще поддерживается в железе. Я тоже хотел когда-то написать но бросил
    в силу своей нетерпеливости. Мне было интересно понять насколько FPU близок к языку Forth.

    По топику выше пишут интересные советы по брутфорсу но это задача на уровне алгоритмизации
    сложная и я-бы на твоем месте все таки начал с квадратных уравнений. Заодно освоишь работу с вводом
    выводом текста.

    Вобщем брутфорсы и умноженя матриц это очень круто но ту просто попробуй это ПРАВИЛЬНО решить
    на языке высокого уровня и проникнись с сложностью решения. И я думаю на этом этапе ты устанешь
    и не пойдешь дальше. Вообще ассемблер - это язык очень узкого применения и какие-то языковые
    фичи (ООП) в ассемблере уж точно не нужны. Ну по крайней мере они там не имеют какого-то явного
    преимущества.
    Ответ написан
    Комментировать
  • Как управлять значением пикселей на экране в виндовс?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Во времена DOS это работало да. Ты мог писать напрямую в банки видеопамяти старых карточек типа VGA/SVGA.
    Примеры кода для C++ можно найти в книжке Шикина и Борескова по графике. Но я не советую потому что
    не актуально. И современный стек графики чуть длиннее.

    Знание того как работает OpenGL и DirectX - скорее всего тебе не даст полной картины как работает железо.
    Потому что железо NVidia и железо Radeon скорее всего будет сильно отличаться. Как будут обобщены отличия - чорт его знает. Скорее всего через драйвер. Но если ты очень хочешь поработать с пикселами отдельно и быстро
    по посмотри в SDL. Я кстати тоже туда хотел посмотреть на днях. Мне чего-то захотелось температурную
    карту IPv4 адресов нарисовать. Я такую видел образца 2009 года. А тут захотел свою.
    Ответ написан
    5 комментариев
  • Как собрать библиотеку из кода для 16-bit ОС для работы в 32-bit \ 64-bit ОС?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут еще такая тема что на эту задачу трудно написать acceptance criteria. Ну допустим пойдет автор на фриланс. Сделает заказ. Ему скажут готово. Переписал. Он скажет - не работает. А они скажут - пуговицы пришиты нормально.
    Какие претензии? Скользкая это постановка. Вообще надо ставить новую задачу о разработке софта. Это знания из ДОС-овского исходника можно использовать а можно и выкинуть. Но упор здесь должен быть именно на разработку.
    Ответ написан
    Комментировать
  • Как увеличить FPS в системе?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для копирования из временного буффера в видимый, я использовал инструкцию rep movsd, хоть и знаю, что до i286 включительно такой инструкции нет. Вопрос: как повысить число кадров в секунду?

    Без тонкой диагностики нут - нельзя. Я не знаю как в геймдеве но в других отраслях при возникновении проблем самое первое что делают - меряют время. Можно мерять профайлером но это явно не твой вариант.

    Найди себе сверх-точные часы которые меряют наносекунды (ты-же ассемблерщик?) Померяй сколько занимает rep movsd. Меряй не один раз а хотя-б много итераций и бери среднее. Может быть не в этом твоя проблема с fps, а где-то в другом коде.
    Ответ написан
  • Может кто нибудь подсказать в чем ошибка(nasm)?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вот такие варианты бывают под win:
    win32     Microsoft Win32 (i386) object files
    win64     Microsoft Win64 (x86-64) object files
    Ответ написан
    2 комментария
  • Как организовать массив состоящий из разных участков памяти?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Напоминает попытку построить свой кеш. А зачем топик тегирован Ассемблером? Какая тут нерешаемая
    для ассемблера задача?
    Ответ написан
    Комментировать
  • Как выводить числа на семисегментный дисплей в Microprocesor Simulator 5v32?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Код цифры - в сигналы 7 сегментного индикатора это классическая задача на системотехника.

    Рисуют табличку. Потом минимизируют через карты Карно. Получается 7 булевых функций которые отображают номер в сегменты индикатора.

    Но для нашего случая табличка из 10 цифр сойдёт.
    Ответ написан
    Комментировать
  • Что за странная константа?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Это красивое число. Вот так в хексах выглядит 0x40000000.
    Скоре всего это какая-то константа из stdio.h, stdlib.h, time.h
    Ответ написан
  • Хочу написать простенький симулятор процессора для уроков, какую выбрать систему команд?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для проведения уроков хочу написать простенький симулятор процессора

    Нужно делать тот минимум который нужен для уроков. Если например это арифметика - то
    сойдет процессор без регистров. Можно считать что разрабатываем систему команд для
    стековой машины. Как Java.
    Ответ написан
    Комментировать
  • Почему Clang (с -O3) не векторизует данный цикл?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В первом варианте был массив четверок int или массив 128 битных элементов.
    Во втором случае - два независимых массивка 64х битных элементов которые в памяти
    расположены достаточно далеко и для них скорее всего не нашлось такой векторной
    команды которая-бы адресовалась к паре 64 + 64.
    Ответ написан
    9 комментариев