Задать вопрос
Ответы пользователя по тегу C
  • Можно ли реализовать программу, написанную на 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. Я думаю это будет правильное направление куда дальше искать.
    Ответ написан
    Комментировать
  • Как "выпрямить" кольцевой буфер c ограниченной доп.памятью?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Автор мне кажется ты решаешь две разных задачи.
    Первое - кольцевой буфер. Его не надо сортировать и его API
    обычно очень простой. Это блокирующие push/pop или там атомарный
    peek или проверка на пустоту. Они работают быстро и в этом их преимущество.

    Если ты задумал очереди с приоритетами то посмотри например пирамиду (heap).
    Ответ написан
    Комментировать
  • Как корректно вывести функцию в байтовом виде?

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

    int f(int a, int b) {
        return a + b;
    }
    void _end(void) {};


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

    И трюки которые работали в ассемблере могут не работать для языков где есть агрессивная
    оптимизация.
    Ответ написан
    Комментировать
  • Жизнеспособна ли задумка и реализация "динамического" rpc?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вполне себе жизнеспособна.

    В стандарных туториалах по Hadoop/AVRO есть пример на Java, где схема
    месседжа изначально не известна но ее наполнение появляется в фазе рантайм
    приложения.

    А все компилляторы protobuf, AVRO, thrift просто помогают убрать рутину. Но при
    этом требуют чтобы до компилляции все спецификации были известны.
    Ответ написан
    Комментировать
  • Можно ли использовать в wasm загрузку dll библиотеки?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Здесь перечислены языки, которые могут являться источниками кода для WebAssembly

    https://webassembly.org/getting-started/developers...

    и вашего кейса среди них нету.
    Ответ написан
  • Почему clang выдает такой ассемблерный код?

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

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

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

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

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

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если размерности известны. Например 120 на 30 на 200 на 40 то такой гипер-кубик
    можно упаковать в обычный линейный массив. И он будет по длине равен 28800000 элементов.
    Таким образом любой многомерный массив укладывается в одномерный.
    Формула доступа будет достаточно простая. Почти тоже что и для матрицы.

    Тоесть задача хранения - решена.
    Ответ написан
    9 комментариев
  • Нужен ХОРОШИЙ rpc для языка Си, есть ли решения?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Посмотри еще в Apache Thrift. Это не совсем RPC. Это скорее стандарт на универсальный
    обмен информацией между разными языками и платформами. Но у него в качестве
    примеров есть клиент-сервер на сокетах.

    На нем также описан стандарт файлового формата Parquet для bigdata.

    https://thrift.apache.org/
    Ответ написан
    Комментировать
  • Реализация шифрование части исполняемого кода на Си?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можешь зашифровать ddl-ку и после успешной расшифровки - динамически подгружать ее к коду.
    Но тут возможны нюансы с антивирусом.
    Ответ написан
    Комментировать
  • Как реализовать кроссплатформенную поддержку Unicode в аргументах командной строки в C?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тебе проще всего посмотреть как эта задача уже решена в других Windows/Linux проектах.
    Я думаю что ты тут не первооткрыватель. Уже решали эту задачу миллион раз.
    Ответ написан
  • Может ли язык Си работать на условной stack-based машине?

    mayton2019
    @mayton2019
    Bigdata Engineer
    на условной stack-based машине


    С точки зрения практических стековых машин. Существует язык стек-ориентированный Forth и на нем программируют микроконтроллеры и вообще творят всякие штуки которые можно описать алгоритмом. Гитхабе я находил проекты реализаций языка Lisp на Forth. Тоесть ... скорее всего можно все.

    Является ли Форт в данном вопросе stack-based машиной - я не знаю. Он - скорее всего шире чем просто
    стек машина. По крайней мере есть ссылки на память и стек возвратов.

    Для прояснения - желательно чтобы автор привел свое понимание термина. Потому что есть еще
    push down automata, это тоже термин и его надо как-то сопоставить с тем что пишет автор
    иначе у нас будет оооочень много стековых машин с разными свойствами и мы запутаемся.
    Ответ написан
  • Что стоит учить с или c++ или c#?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Добрый вечер! Столкнулся с такой проблемой: Мне очень нравятся семейство языков Си, у меня есть выбор учить C++ либо C#, хочу разрабатывать ПО для ПК. Подумал начать с C++ и говорят что сначала поучить чистый СИ, а после переходить на C++, так что же из этого правильно? Надо ли учить Си? Или может лучше начать с C#, а дальше уже выучу C++?

    Тема сравнения С/C++/C# в публичном пространстве - опасная тема. Она обычно заканчивается
    топиком в 1000 страниц и великой войной всех против всех. Я видел много таких войн.
    Они ничем не заканчиваются. Специалисты остаются при своих мнениях. А зритель просто развлекается.

    Сам по себе выбор языка ставят только новички. Професиионалу безразличен язык (почти). Его может больше интересует отрасль, стек технологий, стандарты и протоколы. С моей точки зрения сегодня
    таким стандартом может быть выбор облака (AWS, Azure, GCP).

    Чистый СИ учить смысла нет. Учи сразу С++. Но даже его создатель Бьорн Страуструп считает что С++ это
    сложный язык и он настаивает чтобы новички не брались учить все фичи сразу. Исключение по языку
    СИ может быть в том случае, если ты собрался быть инженером по разработке микро-контроллеров
    и у тебя скорее всего будет только СИ как основной (на 80-90%) инструмент взаимодействия с таким железом. Выйти на мидловый или синьорный уровень в С++ очень тяжело. Тяжелее чем в других языках.
    Поэтому будь готов терпеть. Вот когда виски станут седые - тогда и будешь господин-синьор.

    C# - это очень сильно корпоративный стандарт от Microsoft. Никакой связи с С++ он не имеет. Он конечно
    внешне похож но это сходство обманчиво. Да изучать его тоже можно. Он учится легко. Существуют книги
    вроде ".... C# за 14 дней". Разработка бизнес-приложений на шарпах идет гораздо быстрее чем на С++
    например. И завалить систему в синий экран в этом языке гораздо труднее. В нем реализованы методы
    защиты памяти и нельзя грязно трюкачить с указателями как это любят в С или С++. Производительность
    шарпов в численных методах будет слабее чем в С++ но обычно бизнес не ставит таких задач и чаще
    надо будет писать веб-хендлеры или хендлеры MQ-систем. Кач уровней синьорити идет быстрее в шарпах.
    Ответ написан
    2 комментария
  • Почему программа прерывает свою работу на C?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Возможно scanf при попытки считывать 1 character читает предыдущий enter.

    Попробуй рецепт который пишут тут https://stackoverflow.com/questions/13542055/how-t...
    Ответ написан
    1 комментарий
  • Почему после ассемблера учить Си легче?

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

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Во всех случаях мы описали тип слева. Тоесть задача типизации - выполнена.
    float a = 1.0f;
    unsigned int a = 10u;

    Я думаю что ничего дополнительно указывать не надо. В противном случае у code-reviewer
    это вызывает удивление и очередной WTF. Тоесть вам придется объяснять своему коллеге
    ДЛЯ ЧЕГО вы ввели в исходные код дополнительную информацию.

    Нужно писать так чтобы у коллег к вашему коду вообще не возникало вопросов.
    Ответ написан
    Комментировать
  • Где ошибка в коде?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вот тут как-то странно написано.
    if(m == 'd') racket.x + 1;
    if(m == 'a') racket.x - 1;


    Если хочешь чтоб результат сохранился то надо или инкремент написать или выражение с присваиванием
    racket.x = racket.x + 1;
    Ответ написан
    2 комментария
  • Можно ли запустить программу на языке C в операционной системе FreeDOS или MSDOS?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я думаю можно. Поищи такие компилляторы как Watcom C, Borland C.
    Они умеют генерить код для DOS. На ваткоме кажется была написана
    игра Doom for DOS.

    UPD +Линка www.openwatcom.org
    Ответ написан
    Комментировать
  • Как управлять значением пикселей на экране в виндовс?

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

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Задача похожа на knapsack problem. Ее можно переформулировать как укладка вещей в рюкзаке с полным заполнением и с сохранением порядка вещей. Или еще как поиск всех сумм целых чисел 1,2,3 равных в сумме n.

    Если представить тернарное дерево где childs - это соотвественно длины прыжков (веса) - тогда задача сводится к генерации всех возможных путей в тернарном дереве где длина пути равна n. У этого дерева будет много лишних ветвей которые можно сразу отбросить на этапе обхода если частичная сумма уже больше чем n.

    Вобщем DFS.
    Ответ написан
    Комментировать
  • Как понять какой стандарт Си используется в проекте?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В исходниках может не быть никакого явного указания стандарта. Можно попробовать собирать проект начиная с самых старых версий и вести учет ошибок. Вот как ошибки уйдут - так и стандарт соотвествует.
    Ответ написан
    Комментировать