• Где хранить iv, если я могу запомнить только пароль?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    где обязательным условием для расшифровки является наличие iv.

    А именно, того же IV, что был использован при шифровании.

    какие есть варианты решения данной проблемы?

    - использовать фиксированный IV (например все нули).
    - генерировать его из хранимых данных (например какой-нибудь хеш от пароля). В википедии упоминается похожий вариант: "a cipher or a hash function is used to generate the IVs from the key and the current sector number".
    - использовать режим CTR.
    Ответ написан
    Комментировать
  • Ассемблер, почему дизассемблированном коде много ненужных операций?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему не переписать вместо этого
    add ebx,dword ptr [rbp+ECX*4+10h]

    Буквально так написать нельзя, потому что нет такого режима адресации в котором можно было бы использовать вместе Rbp (64-битный) и Ecx (32-битный). Можно было бы написать add ebx,dword ptr [rbp+rcx*4+10h], но для этого счётчик цикла должен был бы быть 64-битным, а он, как мы видим, 32-битный (int i). Т.е. ответ на вопрос "для чего это": для беззнакового расширения 32-битного счётчика цикла в регистр, который можно использовать для доступа к памяти.

    Другое дело, что из исходного кода очевидно, что при обращениях к памяти i не выходит из диапазона 0..9, так что разницы между ecx и rcx нет и не может быть. Возможно я что-то упускаю и у компилятора другое мнение на этот счёт, но может быть он просто туповат и не имеет кода который бы мог использовать эту возможность оптимизации, а может такая оптимизация и есть, но она не была включена во время генерации этого кода.
    Ответ написан
    Комментировать
  • Как эмуляторы транслируют клиентский код в машинный?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Когда эмулятор собирает и компилирует код jit, то как он этот код в машинных инструкциях составляет.

    Если ты посмотришь на QEMU, то у него есть фронт-енды (https://github.com/qemu/qemu/tree/v8.1.0/target), каждый из которых транслирует инструкции эмулируемой машины в промежуточный код. И есть бэк-енды (https://github.com/qemu/qemu/tree/v8.1.0/tcg), каждый из которых транслирует инструкции промежуточного кода в инструкции хостовой машины. Каждая гостевая инструкция может превратиться во множество промежуточных, а каждая промежуточная -- во множество хостовых. У разработчиков есть правило, что если на гостевую инструкцию требуется больше 20 промежуточных, то вместо прямой трансляции такая инструкция реализуется как вызов функции на C. Инструкции транслируются базовыми блоками, с заданного адреса и до достижения одного из следующих условий: 1) встречена инструкция выполняющая переход (условный или безусловный, вызов функции, возврат из функции, сюда же относятся инструкции гарантированно вызывающие исключение), или 2) PC переходит через границу страницы виртуальной памяти, или 3) количество инструкций в базовом блоке превышает заданный предел. Вдобавок с каждым оттранслированным базовым блоком ассоциируется дополнительный набор флагов, определяемый фронт-ендом, который кодирует состояние, в котором была машина при трансляции этого кода. Это позволяет иметь несколько вариантов трансляции для кода начинающегося с одного и того же адреса, например для разных уровней привилегий. Оттранслированные базовые блоки помещаются в кеш с функцией поиска по комбинации адреса и дополнительного набора флагов. В цикле выполнения эмулятор ищет транслированный базовый блок кода в кеше (а если не находит его, то транслирует и помещает в кеш), запускает его и получает контроль после завершения его выполнения.

    надо к примеру Перед выполнением каждой инструкции проверять наличие прерывания

    Вовсе не каждой, даже в 100% точной эмуляции нужно проверять IRQ только когда прерывания разрешены. QEMU обычно проверяет запрос на прерывание только перед входом в оттранслированный базовый блок.

    Или же есть несколько блоков, где линейно выполняется весь блок, а последняя инструкция прыгнет в другой блок.

    Да, QEMU выполняет трансляцию базовыми блоками.

    к примеру для вот такого примера графа, сколько базовых блоков можно построить?

    В этом графе не обозначены безусловные переходы, если их нет, то QEMU мог бы выделить такие базовые блоки: 0-1-2-3, 4-5-6, 7-8-1-2-3, 9-10, 11-12-13, 14-15-16-2-3, 17, всего 7 блоков.
    Если безусловные переходы -- это все переходы от узлов с бОльшими номерами к узлам с меньшими, то картина была бы такой: 0-1-2-3, 4-5-6, 7-8, 1-2-3, 9-10, 11-12-13, 14-15-16, 2-3, 17. Да, фрагмент 2-3 оттранслирован три раза: сам по себе и в составе других блоков.
    Ответ написан
    2 комментария
  • Пытаюсь собрать прошивку для stm32. Ошибка "src/core_cm3.c: Assembler messages"?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    g++  ...   src/core_cm3.c src/system_stm32f10x.c -o build/main


    src/core_cm3.c: Assembler messages:
    src/core_cm3.c:447: Error: no such instruction: `mrs %eax,psp'


    На какой системе ты выполняешь сборку, на x86? Тогда чтобы получить код для arm тебе нужен не g++, а какой-нибудь arm-linux-gnueabi-g++.
    Ответ написан
    2 комментария
  • Что планирует ОС - потоки или процессы?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Из всего изученного стало понятно, что процессы - это некие "контейнеры", содержащие id, статус, instruction pointer, значение регистров, открытые файлы и другие данные контекста.

    Вот уже по этому предложению видно, что понятно не стало. instruction pointer и значения регистров -- свои у каждого потока.

    какую роль в планировании играют процессы?

    Никакой.

    Для чего они нужны?

    Для учёта ресурсов и создания изолированных адресных пространств.

    Как планировщик ОС работает с процессами?

    Никак.

    Моя единственная догадка в том, что планировщик как бы "заглядывает" в каждый процесс и уже там работает с потоками.

    Не нужно ему никуда заглядывать. У него есть списки потоков находящихся в разных состояниях, а планирование заключается в перемещении потоков по этим спискам.
    Ответ написан
    9 комментариев
  • Как найти утечку памяти?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как найти утечку памяти?

    Стандартный совет: попробовать собирать с опцией -fsanitize=address либо запускать под valgrind.
    Ответ написан
    Комментировать
  • Существует ли 100% свободный процессор?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    существует ли 100% свободный процессор

    Существует несколько открытых реализаций risc-v: https://en.wikipedia.org/wiki/RISC-V#Open_source наверняка среди них есть и свободные.
    Ответ написан
    Комментировать
  • Как в bash через sed заменить строку через регулярное выражение?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    lang="[a-zA-z]{2}"
    диапазон из 2-х любых латинских букв

    Должно быть lang="[a-zA-Z]\{2\}"
    Ответ написан
    Комментировать
  • Как сделать ожидание завершения linux I/0 процесса?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Можно как-то дождаться завершения всех?

    Если они не демонизируются, можно ждать их завершения командой wait, см. man bash. Если демонизируются -- надо наблюдать за их PID-файлами.
    Ответ написан
    Комментировать
  • Почему не работает загрузчик?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    я так понял, происходит прыжок в никуда?

    Расскажи, как ты это понял?

    почему может не работать?

    Первая ошибка здесь: твой код собран под 0:7c00, но ты загрузил в ds 7c00 вместо нуля.
    Ответ написан
  • Есть ли закрытый исходный код в ядре linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Есть ли закрытый исходный код в ядре linux?

    Нужно понимать, что такое исходный код ядра и как он превращается в исполняемый код в каком-нибудь дистрибутиве, чтобы видеть, что без уточнения, в каком именно коде ядра, вопрос не имеет смысла.
    В исходном коде доступном на kernel.org нет ничего проприетарного. Но сборщик дистрибутива может собрать какие угодно модули вместе с ядром, а также добавить произвольный код к оригинальному коду ядра.
    Ответ написан
    Комментировать
  • Что обозначает инструкция?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    помогите понять инструкцию на MASM:
    mov dx, es:[bx].StartCluster

    Это mov dx, es:[bx + StartCluster], загрузка из базового адреса в регистре + смещения, только в псевдо-С записи. Где-то раньше должна быть определена структура с полем StartCluster, которое используется здесь в качестве смещения.
    Ответ написан
    5 комментариев
  • Как скомпилировать код C в .ko?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Ответ написан
    Комментировать
  • Что не так с моим кодом assembler?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что не так

    Я не нашёл ответов в доступной документации, за исключением следующей ремарки в описании ключа /AT командной строки:
    Enables tiny-memory-model support.
    Enables error messages for code constructs
    that violate the requirements for .com format files.

    Подозреваю, что assume не может использоваться в masm в исходниках .com, поскольку такие исходники не могут иметь символьных ссылок на сегменты.

    Если вопрос -- "что делать", то ответ -- выкинуть директиву assume из кода.
    Ответ написан
  • Как это работает?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как и почему это работало тогда, а вот в досбоксе неработает?


    int 2f -- это multiplex interrupt, портал к дополнениям выполняющимся вокруг DOS. Функция 0x1600 -- это конкретно тест "имеются ли в наличии сервисы windows", см. Почему это должно работать в досбоксе, там же нет виндовых сервисов?
    Ответ написан
    Комментировать
  • Почему я не могу попасть в single-user mode [решено]?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    WTF? Это у меня кривые руки или в ядре при переходе от 4.х к 5.х опять что-то втихушку поправили

    single -- это не параметр ядра вообще. Это параметр init. Сравнивай системы инициализации.
    С systemd для этого эффекта можно использовать параметр systemd.unit=rescue, см.

    Ну и имеет смысл проверить, что grep -w single /proc/cmdline подтверждает, что параметр в неизменном виде добрался до юзерспейса.
    Ответ написан
    9 комментариев
  • Пробую собрать bmminer-cgminer492, ошибка при сборке. Каких зависимостей не хватает?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    получаю следующую ошибку

    судя по тексту ошибок, всего хватает, но ошибки в коде. Я бы в cgminer.c добавил #include <inttypes.h>
    Ответ написан
    Комментировать
  • Генерация паролей на c++ Не могу понять в чем проблема?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    std::pow(alphabet.length(), password_length);

    82 в десятой степени -- это 0xbebf59a0_7dab4400, т.е. это число уже не влезает в 64-битный long long int. Вам нужно придумать другой способ считать пароли.
    Ответ написан
    Комментировать
  • Как исправить вывод матрицы С++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    при замене почему то предпоследний элемент строки и столбца заменяется на случайное число из матрицы

    не на случайное же, а поскольку строка пересекается с заменяемым столбцом, то на тот элемент, который был из строки скопирован в столбец ранее.

    Можно пофиксить например так:

    void replaceColumn(int** matrix, int size) {
        int maxRow = 0;
        int maxElement = 0;
        int copy;
    
        // Находим строку с максимальным элементом
        for (int i = 0; i < size; ++i) {
            for (int j = 0; j < size; ++j) {
                if (matrix[i][j] > maxElement) {
                    maxElement = matrix[i][j];
                    maxRow = i;
                }
            }
        }
    
        copy = matrix[maxRow][size - 2];
        // Заменяем предпоследний столбец найденной строки
        for (int i = 0; i < size; i++) {
            matrix[i][size - 2] = (i == size - 2) ? copy : matrix[maxRow][i];
        }
    
    }
    Ответ написан
  • Происходит ошибка сборки GNU M4, почему?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    /mnt/lfs/usr/include/bits/stdlib.h:86:3: error: #error "Assumed value of MB_LEN_MAX wrong"

    Ну что, нужно взять /mnt/lfs/usr/include/bits/stdlib.h и почитать внимательно, что там вокруг 86й строчки написано и где это assumed value зашито. Вообще эта ошибка не выглядит специфичной для m4, больше похоже на глюк libc.
    Ответ написан