• Как ввести и вывести число в assembler(AT&T, GAS синтаксис)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Пишу под Linux(Ubuntu), следовательно приходится осваивать синтаксис GAS(AT&T)

    Не, не "следовательно". gas умеет как синтексис intel (.intel_syntax) так и синтаксис at&t (.att_syntax).

    addb $str, i
    relocation truncated to fit: R_X86_64_8 against `.data'

    Потому что при сборке под 64 бита надо адресоваться относительно %rip. Если оно тебе не надо, проще собирать под 32 бита.

    int $0x80

    Не работает в 64-битных программах. Ну ты понел. (с)
    Ответ написан
    Комментировать
  • Почему у меня выскакивают ошибки при компиляции ядра?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Может я что то не так делаю, кто подскажет?

    Всё так (не считая того, что нет смысла вызывать один defconfig, потом копировать его результаты и вызывать его же снова. Но и вреда от этого быть не должно. Кстати, cp .config arch/arm64/configs/patina_defconfig ; make platina_defconfig -- опечатался задавая вопрос?).
    Попробуй собирать out-of-tree, иногда это помогает. Для этого добавь O=<путь к каталогу сборки> ко всем командам make.

    Ну или дай ссылочку на репозиторий и тэг или бранч с которого надо собрать -- я тоже попробую.
    Ответ написан
  • Почему и как этот код на Си работает, если он работать не должен?

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

    int i,k,w = 0;

    Сюрприз №1: в этой строке мы занулили только w (да и то непонятно зачем).

    // каким образом i учавствует в коде, если мы с ней
    // ничего не делали?? если убрать это условие, код не работает

    for(i=0; i<w; i++)

    Сюрприз №2: вот же, i++, какое "ничего"?

    зачем в этом коде нужна переменная k,

    Переменная k в этом коде не нужна, если не считать единственного printf с её участием.

    Как это код работает?

    Разбивает исходную строку по пробелам тут: ptr=strtok(s," ");, в цикле for(i=0; i<w; i++) проверяет, что подстрока состоит только из символов 'a'..'z', если да (т.е. i в цикле достиг длины текущей подстроки) -- печатает подстроку. Переходит к следующей подстроке тут: ptr=strtok(NULL," ");
    Ответ написан
  • C++ Builder. Аналог REG DELETE в CMD. Как удалить ветку реестра?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    AnsiString params[] = {"/c REG DELETE \"***\"};
            for (unsigned short i = 0; i < params->Length(); {
               system(params[i].c_str());
            }

    ругается на "Access violation at address"

    Потому что этот код думает, что длина первой строки -- это количество строк в массиве params. С чего бы?
    Ответ написан
    Комментировать
  • Как использовать драйвер из андроид в линукс?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Посоветуйте, можно ли в линукс задействовать драйвер из андроида?
    Как это сделать?

    Скорее всего можно. Найти исходники этого андроида, скопировать исходники драйвера в исходники ядра своего линукса, интегрировать его в Kconfig и Makefile, собрать ядро.
    Ответ написан
    9 комментариев
  • Задача по олимпиаде?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Запишем последовательность блинов цифрами 0 (светлой стороной вверх) и 1 (тёмной стороной вверх). Назовём инверсией переход с 1 на 0 или с 0 на 1. Один переворот стопки может добавить или убавить максимум одну инверсию на границе между переворачиваемой и не переворачиваемой частями (все инверсии внутри переворачиваемой части сохраняются, только меняют знак). Следовательно минимальное число переворотов для устранения всех инверсий равно числу инверсий в исходной стопке блинов. Если первый блин лежит тёмной стороной вверх для решения задачи потребуется ещё один переворот всей стопки.
    Ответ написан
    Комментировать
  • Как правильно решить задачу на работу с двумя массивами в asm?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Нужно из c++ переместить этот массив в ассемблерную вставку, а там уже перенести из этого массива в другой массив все элементы, которые равны сумме соседних.
    То есть регистры e*x нельзя брать. Кто может подсказать, где найти материал по этой теме, либо же предложить пример кода для решения поставленной задачи?

    Можно написать этот код так, что он не будет использовать никакие конкретные регистры явно. Конкретные регистры будут подставлены компилятором. Например (gcc):
    #include <stdint.h>
    
    void f(void)
    {
        uint32_t a[16] = {1, 2, 3, 1, 5, 4, -1, }, b[16] = {0};
        void *a1, *b1;
        uint32_t tmp, cnt = 14;
    
        asm (
            "lea %[a], %[a1]\n\t"
            "lea %[b], %[b1]\n"
            "1:\n\t"
            "mov (%[a1]), %[tmp]\n\t"
            "add 8(%[a1]), %[tmp]\n\t"
            "cmp 4(%[a1]), %[tmp]\n\t"
            "jne 2f\n\t"
            "mov %[tmp], (%[b1])\n\t"
            "add $4, %[b1]\n"
            "2:\n\t"
            "add $4, %[a1]\n\t"
            "dec %[cnt]\n\t"
            "jnz 1b\n\t"
            : [cnt] "=&r" (cnt), [tmp] "=&r" (tmp),
              [a1] "=&r" (a1), [b1] "=&r" (b1),
              [b] "=m" (b)
            : [a] "m" (a));
    }
    Ответ написан
  • Как выполнить некоторые действия с коммитами в git?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    git rebase -i <идентификатор коммита>

    комментарий к коммиту 1 я считаю неправильно информативным и хочу его переименовать.

    -- отметить коммит как r (reword) в списке rebase.

    как удалить коммиты 3 и 4, чтобы они изчезли в том числе из "git log --all", у меня по сути было 3 изменения в проекте, коммиты с 3 по 5 по сути являются шагами одного изменения и хранить в истории коммиты 3 и 4 никакой надобности нет.

    Это не "удалить", это "объединить с другими коммитами".
    -- отметить все идущие подряд коммиты которые надо объединить, кроме первого, как s (squash) в списке rebase.
    Ответ написан
  • Что за ошибка в коде вложенного ассемблера?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    asm (
        "mov a, %eax \n\t"
        "mov b, %ebx \n\t"
        "add %eax, %ebx \n\t"
        "mov %ebx, c \n\t"
      );


    Так в gcc не работает. Должно быть например так:
    asm (
        "mov %[a], %%eax \n\t"
        "mov %[b], %%ebx \n\t"
        "add %%eax, %%ebx \n\t"
        "mov %ebx, %[c] \n\t"
        : [c] "=rm" (c)
        : [a] "rm" (a), [b] "rm" (b)
        : "eax", "ebx", "cc"
      );

    Что это всё значит можно почитать тут.

    Компилирую, а тут фигня происходит:

    Ошибка говорит о том, что код попытался обратиться к глобальному символу a, но такого символа нет. Потому что переменная a размещена на стеке и символьного имени у неё и правда нет. Если бы она (вместе с b и c) была глобальной, всё равно была бы ошибка (по крайней мере при компиляции под 64 бита), но другая.
    Ответ написан
    3 комментария
  • В чем моя ошибка в AVR, где я должен зациклить, или что вообще сделать?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Вот где код вырывается в память 0xfffff

    Вот в конце же, после последнего nop.
    Ответ написан
    Комментировать
  • Как вывести несколько MessageBox на C++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    MessageBox -- модальный. Невозможно одновременно вывести несколько MessageBox из одного потока. Можно создать несколько потоков и в каждом из них вызвать MessageBox.
    Ответ написан
    Комментировать
  • Как исправить ошибку в qt?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Попытался подключить библиотеку для конвертации xml в json

    Это не библиотека, это кусок говнокода. А ты наверное добавил #include <xml2json.hpp> в filefactory.cpp и xmlfile.cpp? Ну вот она на такое использование не рассчитана. Подключай её в один cpp, а прототипы функций скопируй в отдельный заголовок и подключай его во все остальные cpp где эти функции нужны.
    Ответ написан
    1 комментарий
  • Как автоматом подключать к wifi Raspberry pi с Kali linux при запуске?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что можно сделать с Kali для реализации такого подключения?

    Разобраться как работает wpa_supplicant и настроить его.
    Ответ написан
    Комментировать
  • Как в Release конфигурации в Linux узнать конкретное место падения программы?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    При использовании gdb не понятно в каком конкретно месте упала программа:
    #0 0x00005633bd506050 in ?? ()


    Так вот же адрес: 0x00005633bd506050

    Как в Release конфигурации

    Не нужно убирать опцию -g из релизной сборки. После сборки можно скопировать получившийся ELF, отрезать от него отладочные символы и запускать его. Когда что-то упадёт, можно будет загрузить core dump с ELFом, в котором отладочные символы присутствуют, чтобы не гадать, где этот адрес.
    Ответ написан
  • Почему g++ из MinGW-w64 не знает про _beginthread и про conio.h?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    g++ ругается, что не найден файл conio.h. Помимо этого, в файле process.h должно быть объявление функции _beginthread. Об этом написано на microsoft.com.

    MinGW реализует стандарты С/С++ и расширения GNU. micro$oft может написать на своём сайте всё что угодно, это не делает написанное стандартом.

    у которого crt будет слинковано статически

    g++ -static
    См.
    Ответ написан
    Комментировать
  • Стек и куча (память)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему бы не выделить для него больше памяти?

    Действительно, почему бы и нет, учитывая, что эта настройка в руках программиста собирающего (на венде, см. cl /F) или запускающего (в *nix, см. ulimit -s) программу?

    Стек работает быстрее

    А что, уже научились освобождать выделенную на стеке память в произвольном порядке?
    Ответ написан
    Комментировать
  • Поведение указателей в Cи?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Это присваивание адреса первого байта массива {0, 0, 0, 0} указателю float?

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

    что будет в i, после данных действий?

    сегфолт при попытке разыменования указателя.

    Начиная с с99 можно сделать так:
    float* arr = (float []){0, 0, 0, 0};
    и это означает создание в текущем контексте (на стеке, если эта строчка внутри функции, или в глобальных данных, если вне) массива из 4 элементов типа флоат, инициализация их нулями и присваивание указателю arr адреса этого массива.
    В этом случае int i = *((int*)arr); проинтерпретирует память первого элемента массива как целое число и присвоит его значение i. По стандарту ieee754 нулевое значение типа float представляется в памяти как 4 нулевых байта, соответственно в i будет записан 0.
    Ответ написан
    6 комментариев
  • Почему не идентифицируется переменная NAN?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Предположу, что NAN появился в С++11, а VS12 его, вероятно, не поддерживает.
    Ну и, справдливости ради, определятся он в <cmath>, который неплохо было бы явно подключить.
    Ответ написан
    1 комментарий
  • Как безболезненно клонировать SSD с линуксом на другой SSD?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    sudo fdisk /dev/sdb
    >d (удаляю раздел)
    >w (пишу)

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

    Все шустренько копируется за 10 минут.
    И..
    Ничего не грузится, вылазит (initramfs).

    man ddrescue читал?
    Never try to rescue a r/w mounted partition. The resulting copy may be useless.
    It is best that the device or partition to be rescued is not mounted at all,
    not even read-only.


    Хэлп!

    Не нужно клонировать диск посекторно. Проще и быстрее создать на целевом диске файловую систему, примонтировать её и скопировать пофайлово.
    Ответ написан
    Комментировать
  • Библиотеки GMP, как сохранять результат вычислений?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как при работе с функциями из библиотеки GMP, считывать и сохранять данные в файл (и читать из файла) например используя Массивы?

    Экспортировать в массив/импортировать из массива через mpz_export/mpz_import.
    Ответ написан