Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Как организовать веб-студию на дому и сколько это может стоить
Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
jcmvbkbc

jcmvbkbc

http://dilbert.com/strip/1998-08-24
  • 1466
    вклад
  • 2
    вопроса
  • 1688
    ответов
  • 47%
    решений
Ответы
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Какие должны быть параметры -L для gcc линкера если используется параметр sysroot?

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    -L путь должен быть полным путем в моей хост машине где производится кросс компиляция или путь относительно пути указанного в параметре sysroot?

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

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

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    Вот тут я как-то постил свой список.
    Некоторые ссылки протухли, но по названию должно хорошо искаться.
    Вдобавок, https://lwn.net/Kernel/Index/ для точечного погружения в отдельные топики.

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

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    Обычно удобно пользоваться моделью памяти, в которой все сегментные регистры указывают в одно место. И если пишешь загрузчик, рекомендуют сегментные регистры инициализировать в самом начале. Какое именно значение сегмента выбрать -- 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

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

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    Сгенерировал приватный и публичный ключ на сервере, публичный скопировал на клиентскую машину в файл 'authorized_keys' но аутентификация как и обычно проходит по паролю.

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

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    Ок. Возник конфликт. Но почему?

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

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

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

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

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

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

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    Файлы imgui.cpp и тд не лежат в корне проекта, я их туда не положил, потому-что при компиляции с ними появляется ещё больше ошибок

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

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    Я открыл файл base.txt, прочитал, получил значение (строку) и присвоил строку к ss

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

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

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    my_slightly_dumb_reallocation(int*, unsigned int, unsigned int) (002793.cpp:29)

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

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

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    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.
    Ответ написан 21 дек. 2020
    Комментировать
    Нравится 1 Комментировать
  • Как отследить запуск процессов в Linux?

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    Мне нужно в файл записать какие именно утилиты и компиляторы запускаются и с какими параметрами.

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

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    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;

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

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    На ассемблере в программе есть раздел .text, .bss, .data

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

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

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

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

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    mul al,5

    Нет такого опкода. mul вообще на непосредственное значение умножать не может. imul который может, умножает как минимум 16-битное значение в ax.
    Вместо mul умножить на 5 можно через lea (начиная с i386) либо через сдвиг на 2 и сложение.

    idiv cx,4

    idiv так не умеет. Куда проще было бы сделать sar cx, 2
    Ответ написан 16 дек. 2020
    Комментировать
    Нравится Комментировать
  • Как переназначить клавишу ё -> õ?

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    Ещö вариант с использованием xmodmap -- добавить в ~/.Xmodmap строчку
    keycode 49 = grave asciitilde otilde Otilde и выполнить xmodmap ~/.Xmodmap
    Ответ написан 15 дек. 2020
    Комментировать
    Нравится 3 Комментировать
  • Из-за чего возникает ошибка Segmentation fault (core dumped)?

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    выдает ошибку Segmentation fault (core dumped).
    В чем причина данной ошибки?

    class Car
        {
             ...
    private:
             std::string Availability;
             std::string brand;
             int carAge;
        };
    ...
    Car machine;
    while (fin.read((char*)&machine, sizeof(Car)))

    В том, что нельзя сложные объекты так записывать в файл и читать из файла. Так можно обращаться с объектами содержащими свои данные в непрерывном участке памяти. std::string к таким классам объектов не относится.
    Ответ написан 14 дек. 2020
    8 комментариев
    Нравится 1 8 комментариев
  • Не могу решить лабу по ассемблеру?

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    mov al,x
    cmp al,a
    jg sled1
    mov bl,a
    ...


    как сделать разветвление от условия, если это условие не удовлетворяет.

    Если условие не удовлетворено, инструкция jg sled1 не совершает перехода и ты просто выполняешь следующую за ней инструкцию -- mov bl, a. Ветвления и переходы в твоём коде выглядят правильно.
    Ответ написан 13 дек. 2020
    Комментировать
    Нравится Комментировать
  • QT приложение запускается от root но, но не от обычного пользователя?

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    strace мне ничего полезного не дал(вероятно там и есть ошибка, но я не могу додуматься и увидеть, что нужно)

    Начни со сравнения логов strace -f -v -e execve,exit,exit_group когда запускаешь от рута и от обычного пользователя.
    Ответ написан 13 дек. 2020
    Комментировать
    Нравится Комментировать
  • Почему выводится только первое слово из scanf() в printf() в Си?

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    Почему?

    Потому что scanf("%s", name) сканирует поле до первого пробельного символа.
    Если ты хочешь строчку до конца строки используй, например, scanf("%[^\n]", name)
    Ответ написан 12 дек. 2020
    5 комментариев
    Нравится 3 5 комментариев
  • Почему компьютер после выгрузки модуля зависает?

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    linux-4.15.0/net/netfilter/core.c:353

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

    jcmvbkbc
    jcmvbkbc @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    copy_from_user(ips[i], buffer,256);
    
       	printk(KERN_INFO "ips: %s \n", ips[i]);
       	i++;
    
       	if(strncmp(ips[0],"wh",2)==0){

    почему он работает,

    Во-первых этот код неполный, он использует переменные определённые где-то ещё, от того как именно они определены зависит насколько он "работает".
    Во-вторых, по тому что видно, работает он, скажем, так себе:
    - он печатает строчку принятую из юзерспейса без ограничения длины. Если юзер не поставил 0-терминатор, то напечатает мусор из пространства ядра за нефиг делать.
    - копирование происходит в ips[i], где i увеличивается с каждым вызовом, а анализ всегда смотрит на ips[0].
    - в прототипе функции отсутствует аннотация __user у параметра buffer.

    как его можно переписать, чтобы было удобнее читать?

    Я бы сказал, что его и так удобно читать, особенно если форматирование поправить.
    Ответ написан 12 дек. 2020
    Комментировать
    Нравится Комментировать
Оценили как «Нравится»
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • Следующие →
Самые активные сегодня
  • SoreMix
    SoreMix
    • 7 ответов
    • 0 вопросов
  • Dr. Bacon
    • 6 ответов
    • 0 вопросов
  • Drno
    • 6 ответов
    • 0 вопросов
  • delphinpro
    Сергей delphinpro
    • 5 ответов
    • 0 вопросов
  • BKaiyrbekov
    • 3 ответа
    • 2 вопроса
  • Lord_Dantes
    Lord_Dantes
    • 4 ответа
    • 0 вопросов
  • © Habr
  • О сервисе
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации