• Как происходит работа с short в asm?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    00000234: xori r16,r16,32768
    00000238: addi r16,r16,-32768

    Это классическое расширение знакового бита, в данном случае для 16-битного числа: если бит 15 был установлен (число отрицательное), то после xor он будет сброшен (т.е. он и все биты старше него станут нулями), а после addi бит 15 и все старше него станут единицами. Если бит 15 был сброшен (число неотрицательное), то после xor он будет установлен, а после addi -- сброшен опять.

    Подскажите пожалуйста смысл таких преобразований?

    Знаковое расширение -- это часть short right = acum & 65535;. Оно нужно для того, чтобы работать с загруженными в регистры значениями не задумываясь об исходной ширине их типа данных. Т.е. (short)-1 в 64-битном регистре будет представлен как 0xffffffffffffffff, а не как 0xffff.
    Ответ написан
    Комментировать
  • Bash Script работает некорректно, почему?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Bash Script работает некорректно, почему?
    #!/bin/sh
    В чем может быть проблема?

    Потому что это не bash скрипт. bash скрипт начинается словами #!/bin/bash. Твой скрипт хочет чтобы его выполнял /bin/sh, а он не обязан быть башем.
    Ответ написан
    1 комментарий
  • Include/header guards зачем?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Зачем нужны header guards если в заголовочных файлах мы пишем только объявление функции?

    Не всегда мы пишем только объявления. Иногда мы там пишем определения, например определяем структуры, или псевдонимы типов (typedef). Повторное определение таких вещей -- ошибка. Тут ты можешь сказать: "но я подключаю хедер в каждый исходник только один раз". Да, пока проект простой можно это отследить. Но когда одни хедеры начинают подключать другие хедеры это становится делать сложнее. header guards упрощают развитие проекта.
    Иногда между хедерами бывают циклические зависимости, header guards позволяют разорвать цикл.
    Ответ написан
    Комментировать
  • Как собрать nginx в rhel8?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    --with-pcre=/usr/lib64/

    cd /usr/lib64/ \
    && if [ -f Makefile ]; then make distclean; fi \
    && CC="cc" CFLAGS="-O2 -fomit-frame-pointer -pipe " \
    ./configure --disable-shared

    Из этого лога следует, что параметром --with-pcre ожидается путь к исходникам PCRE, а не к установленным либам. И судя по этому, так оно и есть.
    Ответ написан
    1 комментарий
  • Почему при записи в /proc/ система зависает?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    static struct file_operations process_sched_add_module_fops = {
    …
    proc_create(PROC_CONFIG_FILE_NAME,0777,NULL,&process_sched_add_module_fops);

    Я думаю, что это основная ошибка: proc_create принимает указатель на структуру proc_ops, а не на file_operations. Компилятор должен был бы что-нибудь сказать в этом месте, ты не читаешь его предупреждения?

    static ssize_t process_sched_add_module_write(struct file *file, const char *buf, size_t count, loff_t *ppos)

    А здесь ты потерял аннотацию __user у параметра buf. Этот буфер приходит из юзерспейса, по этой причине ты не можешь лезть в него напрямую функцией kstrtol.
    Ответ написан
  • С чем может быть связана ошибка доступа к чтению файла?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    books[nst] = book;
    В чём может быть ошибка

    в том, что в контейнере books не выделено место для nst объектов.

    раннее были записаны данные в виде двух строчек string и двух чисел int (структуры, в общем)

    ну и структуру бы ты показал заодно, а то мало ли, вдруг у тебя там и в самом деле std::string, а значит вся затея с fread обречена на провал.
    Ответ написан
    4 комментария
  • Сколько будет подбираться хэш и сколько ресурсов для этого понадобиться?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Ты спрашиваешь о preimage-атаке. Для md5 известно о существовании атаки сложностью в 2123.4. Если перебирать маски в лоб, то 29 десятичных цифр дают 97 битов, т.е. сложность прямого подбора 297. Можно сказать, что для такого использования md5 всё ещё хорош. Исходя из оценки "NVIDIA GeForce 8800 Ultra can calculate more than 200 million hashes per second" получаем, что прямой подбор маски займёт порядка 297 / 108 = 1.6 * 1021 секунд работы одной такой карты. Т.е. 5 * 1013 лет.
    Ответ написан
    1 комментарий
  • Есть ли программы анализа листинга на assembler?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Eсть программа на assembler без комментариев. Надо ее ускорить, изменив некоторые участки. Искать эти участки большая морока.

    Искать эти участки можно с помощью профилирования.
    Ответ написан
  • Какие должны быть параметры -L для gcc линкера если используется параметр sysroot?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    -L путь должен быть полным путем в моей хост машине где производится кросс компиляция или путь относительно пути указанного в параметре sysroot?

    Путь может быть полным путём на хост-машине, либо, если он начинается с символа = либо строки $SYSROOT ($SYSROOT не должен быть интерпретирован оболочкой и должен попасть в таком виде в аргументы компилятора), он интерпретируется относительно sysroot.

    См. https://gcc.gnu.org/onlinedocs/gcc/Directory-Optio... и https://man7.org/linux/man-pages/man1/ld.1.html
    Ответ написан
    2 комментария
  • Какие есть хорошие книги по Linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Вот тут я как-то постил свой список.
    Некоторые ссылки протухли, но по названию должно хорошо искаться.
    Вдобавок, https://lwn.net/Kernel/Index/ для точечного погружения в отдельные топики.

    А адептов секты теоретиков "читай исходники" реально надо заставлять читать исходники до просветления.
    Ответ написан
    2 комментария
  • Как задать регистры стека ss, sp на x86 (загрузчик 16бит)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Обычно удобно пользоваться моделью памяти, в которой все сегментные регистры указывают в одно место. И если пишешь загрузчик, рекомендуют сегментные регистры инициализировать в самом начале. Какое именно значение сегмента выбрать -- 0 или 0x7c0 не имеет большой разницы. sp можно инициализировать так:
    start:
    ....
    mov sp, start + 512 + 1024

    это будет работать правильно для любого выбранного org и соответствующим образом инициализированного ss.
    Например:
    org 0x7c00
    start:
    mov ax, 0
    mov ss, ax
    mov sp, start + 512 + 1024


    mov ax, 0x060 ;(1024+512)/16=96=60h адрес стека после загрузчика в сегментах
    mov ss, ax ;установка адреса сегмента стека
    mov sp, 1024 ;установка указателя стека

    непонятно, почему ты решил записать в ss 0x60 а в sp -- 1024. Если ты хотел чтобы сегмент стека указывал на его дно, то должно было получиться (0x7c00 + 512) / 16 = 0x7e0.

    add ax, 0x060 ;адрес стека после загрузчика в сегментах 0x07C0+0x060

    и опять логика непонятна.
    Ответ написан
    3 комментария
  • Авторизацию по ключу SSH?

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

    Ты с сервера заходишь ни клиентскую машину, что ли? Потому что публичный ключ кладут на машину НА которую заходят.
    Чтобы заходить с клиента на сервер, генерируй ключевую пару на клиенте и записывай публичный ключ в authorized_keys на сервере.
    Ответ написан
    1 комментарий
  • Почему при копировании коммита git cherry-pick копирует всю ветку?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Ок. Возник конфликт. Но почему?

    Потому что изменения применяются как патчи, с учётом контекста. А не тупо в лоб "вставить две строки со следующим содержимым начиная со строки 7".

    1. Это я неправильно понимаю как должна работать эта команда или здесь что-то пошло не так?

    И то, и то. Ты представляешь себе перенос изменений слишком просто, а в твоём случае произошел конфликт, как раз там, где твоё представление его не ожидает.

    3. Если cherry-pick работает также как merge, то может лучше тогда делать для копирования squash?

    cherry-pick не работает как merge. merge сливает историю веток целиком, cherry-pick применяет одно единственное изменение.

    Попробуй вносить свои изменения (Add A, Add B, Add C, Add D) в разные файлы чтобы увидеть разницу.
    Ответ написан
    Комментировать
  • Почему я не могу слинковать .cpp файлы с своим проектом SFML?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Файлы imgui.cpp и тд не лежат в корне проекта, я их туда не положил, потому-что при компиляции с ними появляется ещё больше ошибок

    А где по-твоему реализованы функции ImGui::SetNextWindowPos, ImGui::SetNextWindowSize и т.д.?
    Ответ написан
    1 комментарий
  • Показывает старое значение вместо нового (std::stream)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я открыл файл base.txt, прочитал, получил значение (строку) и присвоил строку к ss

    URLDownloadToFile(0, "url/base.txt", "base.txt", 0, 0);
    std::remove("base.txt"); // Удаляю старый файл, если он имеется
    std::ifstream f("base.txt");

    А я вот вижу, что ты сначала файл начинаешь скачиваеть, потом удаляешь, а потом открываешь. Как это должно работать?
    Второе -- URLDownloadToFile только начинает скачивание. Когда оно закончится ты не проверяешь.
    Ответ написан
  • Почему в программе утечка памяти?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    my_slightly_dumb_reallocation(int*, unsigned int, unsigned int) (002793.cpp:29)

    вообще никаких идей нет

    вот тебе идея: посмотреть в строку 29 и ответить на вопрос "где освобождается память выделенная здесь после последнего вызова функции my_slightly_dumb_reallocation"?
    Ответ написан
    1 комментарий
  • Идентификатор не определен. Как решить эту проблему?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    int* my_slightly_dumb_reallocation(int* source, unsigned int n_old, unsigned int n_new) {
        if (source == NULL) {
            int* array = new int[n_new];
        }
        ...
        return array;
    }

    компилятор ругается,

    Переменная array у тебя определена в блоке, а return array стоит вне этого блока. Ты либо return в блок занеси, либо int *array = new int[n_new]; из блока вынеси на один уровень с return array.
    Ответ написан
    Комментировать
  • Как отследить запуск процессов в Linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Мне нужно в файл записать какие именно утилиты и компиляторы запускаются и с какими параметрами.

    strace -f -o log -v -s 100000 -e execve make ...
    -- сделает именно это
    Ответ написан
    Комментировать
  • Что переполняет массив?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    void matrixsort(unsigned int *arr) {
      int temp;
      for (int i = 0; i < M - 1; i++) {

    Здесь должно быть написано for (int i = 0; i < N - 1; i++) потому что это сортировка, а не обход матрицы.

    while (line < N) {
        for (int j = line; j < line + 1; j++) {

    Это какая-то странная конструкция, из-за которой j доходит до N - 1, вызывая ошибку которую ты видишь. Вместо этого можно было выкинуть line вообще и написать просто
    for (int j = 0; j < M; j++) {

    arr0[M] = line;

    Здесь ты портишь элемент матрицы заменяя его номером столбца. Отладка такая?
    Ответ написан
    1 комментарий
  • Сегменты данных, кода это разделение для ассемблера или так хранится в машинном коде?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    На ассемблере в программе есть раздел .text, .bss, .data

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

    Разбит, да. А при линковке некоторые секции можно объединить. Обычно неизменные секции (например .text, .rodata, .tls) объединяют в одну кучу, а все изменяемые (например .bss, .data) объединяют в другую кучу. На "больших" ОС (типа linux) эти кучи эти выравнивают по границе страницы и делают неизменные секции доступными только для чтения. Это помогает сэкономить память и использовать одни и те же страницы для представления неизменных данных в разных процессах.

    для выполнения процессором

    Процессору по большому счёту всё равно как расположено в памяти то, что он выполняет.
    Ответ написан
    Комментировать