Задать вопрос
  • Почему не компилируется SFML приложение?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    g++ -o app.exe "src\\log.o" "src\\app.o"

    надо добавить что-то типа -lsfml-graphics -lsfml-window -lsfml-system в конец.
    См. https://www.sfml-dev.org/tutorials/2.5/start-linux.php
    Ответ написан
    2 комментария
  • Error loading uncompressed kernel without PVH ELF Note ( osdev ) !?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    пытаюсь понять, почему qemu не хочет запускать ядро....


    Потому что это не заголовок multiboot, MAGIC тут взят из старой версии формата, а структура -- из версии 2:

    MAGIC equ 0x1BADB002
    ...
    grubBoot:
      dd MAGIC
      dd FLAGS
    ;	dd 0
      dd (end_grubBoot - grubBoot)
      dd -(MAGIC + FLAGS + (end_grubBoot - grubBoot))
    ;	dd -(MAGIC + 0 + (end_grubBoot - grubBoot))
      
    ;	dw 0
    ;	dw FLAGS
    ;	dd 8
    end_grubBoot:


    QEMU отлично понимает заголовок старого формата:

    MAGIC equ 0x1BADB002
    
      dd MAGIC
      dd FLAGS
      dd -(MAGIC + FLAGS)


    И с этим изменением твой код прекрасно загружается и выполняется:

    trace
    ...
    
    Trace 0: 0x7f2a71e084c0 [00000000/000caa1a/0xb0]
    ----------------
    IN:
    0x00102060:  9b                       wait
    0x00102061:  db e3                    fninit
    0x00102063:  bc 44 23 10 00           movl     $0x102344, %esp
    0x00102068:  53                       pushl    %ebx
    0x00102069:  50                       pushl    %eax
    0x0010206a:  e8 68 00 00 00           calll    0x1020d7
    
    Trace 0: 0x7f2a71e08800 [00000000/00102060/0xb0]
    ----------------
    IN:
    0x001020d7:  55                       pushl    %ebp
    0x001020d8:  89 e5                    movl     %esp, %ebp
    0x001020da:  68 00 10 10 00           pushl    $0x101000
    0x001020df:  e8 8d ff ff ff           calll    0x102071
    
    Linking TBs 0x7f2a71e08800 [00102060] index 0 -> 0x7f2a71e08a40 [001020d7]
    Trace 0: 0x7f2a71e08a40 [00000000/001020d7/0xb0]
    ----------------
    IN:
    0x00102071:  55                       pushl    %ebp
    0x00102072:  89 e5                    movl     %esp, %ebp
    0x00102074:  53                       pushl    %ebx
    0x00102075:  83 ec 10                 subl     $0x10, %esp
    0x00102078:  c7 45 f4 00 80 0b 00     movl     $0xb8000, -0xc(%ebp)
    0x0010207f:  c7 45 f8 00 00 00 00     movl     $0, -8(%ebp)
    0x00102086:  eb 35                    jmp      0x1020bd
    
    Linking TBs 0x7f2a71e08a40 [001020d7] index 0 -> 0x7f2a71e08c80 [00102071]
    Trace 0: 0x7f2a71e08c80 [00000000/00102071/0xb0]
    ----------------
    IN:
    0x001020bd:  8b 55 f8                 movl     -8(%ebp), %edx
    0x001020c0:  8b 45 08                 movl     8(%ebp), %eax
    0x001020c3:  01 d0                    addl     %edx, %eax
    0x001020c5:  0f b6 00                 movzbl   (%eax), %eax
    0x001020c8:  0f be c0                 movsbl   %al, %eax
    0x001020cb:  3b 45 f8                 cmpl     -8(%ebp), %eax
    0x001020ce:  7f b8                    jg       0x102088
    
    Linking TBs 0x7f2a71e08c80 [00102071] index 0 -> 0x7f2a71e08f00 [001020bd]
    Trace 0: 0x7f2a71e08f00 [00000000/001020bd/0xb0]
    ----------------
    IN:
    0x00102088:  8b 45 f8                 movl     -8(%ebp), %eax
    0x0010208b:  8d 14 00                 leal     (%eax, %eax), %edx
    0x0010208e:  8b 45 f4                 movl     -0xc(%ebp), %eax
    0x00102091:  01 d0                    addl     %edx, %eax
    0x00102093:  8b 55 f8                 movl     -8(%ebp), %edx
    0x00102096:  8d 0c 12                 leal     (%edx, %edx), %ecx
    0x00102099:  8b 55 f4                 movl     -0xc(%ebp), %edx
    0x0010209c:  01 ca                    addl     %ecx, %edx
    0x0010209e:  0f b7 12                 movzwl   (%edx), %edx
    0x001020a1:  89 d3                    movl     %edx, %ebx
    0x001020a3:  b3 00                    movb     $0, %bl
    0x001020a5:  8b 4d f8                 movl     -8(%ebp), %ecx
    0x001020a8:  8b 55 08                 movl     8(%ebp), %edx
    0x001020ab:  01 ca                    addl     %ecx, %edx
    0x001020ad:  0f b6 12                 movzbl   (%edx), %edx
    0x001020b0:  66 0f be d2              movsbw   %dl, %dx
    0x001020b4:  09 da                    orl      %ebx, %edx
    0x001020b6:  66 89 10                 movw     %dx, (%eax)
    0x001020b9:  83 45 f8 01              addl     $1, -8(%ebp)
    0x001020bd:  8b 55 f8                 movl     -8(%ebp), %edx
    0x001020c0:  8b 45 08                 movl     8(%ebp), %eax
    0x001020c3:  01 d0                    addl     %edx, %eax
    0x001020c5:  0f b6 00                 movzbl   (%eax), %eax
    0x001020c8:  0f be c0                 movsbl   %al, %eax
    0x001020cb:  3b 45 f8                 cmpl     -8(%ebp), %eax
    0x001020ce:  7f b8                    jg       0x102088
    
    Linking TBs 0x7f2a71e08f00 [001020bd] index 1 -> 0x7f2a71e091c0 [00102088]
    Trace 0: 0x7f2a71e091c0 [00000000/00102088/0xb0]
    Linking TBs 0x7f2a71e091c0 [00102088] index 1 -> 0x7f2a71e091c0 [00102088]
    Trace 0: 0x7f2a71e091c0 [00000000/00102088/0xb0]
    ----------------
    IN:
    0x001020d0:  90                       nop
    0x001020d1:  83 c4 10                 addl     $0x10, %esp
    0x001020d4:  5b                       popl     %ebx
    0x001020d5:  5d                       popl     %ebp
    0x001020d6:  c3                       retl
    
    Linking TBs 0x7f2a71e091c0 [00102088] index 0 -> 0x7f2a71e098c0 [001020d0]
    Trace 0: 0x7f2a71e098c0 [00000000/001020d0/0xb0]
    ----------------
    IN:
    0x001020e4:  83 c4 04                 addl     $4, %esp
    0x001020e7:  eb fe                    jmp      0x1020e7
    
    Trace 0: 0x7f2a71e09b00 [00000000/001020e4/0xb0]
    ----------------
    IN:
    0x001020e7:  eb fe                    jmp      0x1020e7
    
    Linking TBs 0x7f2a71e09b00 [001020e4] index 0 -> 0x7f2a71e09c40 [001020e7]
    Trace 0: 0x7f2a71e09c40 [00000000/001020e7/0xb0]
    Linking TBs 0x7f2a71e09c40 [001020e7] index 0 -> 0x7f2a71e09c40 [001020e7]
    
    ...


    Ещё непонятно, зачем такие игры с форматом kernel, можно было же напрямую:
    LDEMU=-melf_i386
    kernel: $(CSOURCES) $(NASMSOURCES) $(LDFILE)
            $(CC) $(CEMU) -std=c$(CSTD) -c $(CSOURCES) -ffreestanding -nostdlib -nostdinc -fno-pic
            $(ASM) $(NASMSOURCES)
            $(LD) $(LDEMU) --nmagic -T$(LDFILE) -o kernel *.o
    Ответ написан
  • Почему появляется ошибка segmentation fault но при повторном запуске программы её нет?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я не вижу криминала который мог бы привести к segfault в приведённой программе.
    Почему поведение может отличаться между запусками -- например потому что запись в файл /sys/class/gpio/export меняет состояние системы и запоминается между запусками.
    Кроме того, согласно https://www.kernel.org/doc/Documentation/gpio/sysfs.txt в direction надо писать in или out, а high или low нужно писать в value. Сегфолта от этого быть не должно, тем не менее.

    Что происходит, если собрать программу с отладочной информацией и запустить так, чтобы она упала под отладчиком?

    UPD: посмотрел ещё немного... В приведённом исходном тексте кривые юникодные кавычки. Рекомендую исправить на ASCII, либо вставить исходный текст как есть, без фокусов.
    Ответ написан
  • Как в Xfce4, Mate отключить кнопки тачпада?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как отключить кнопки тачпада?

    командой xinput.

    Я использую такой скрипт:
    #! /bin/bash
    
    MODEL='Synaptics TouchPad'
    xinput disable  `xinput list | sed -n "/$MODEL/s/.*id=\([0-9]*\).*$/\1/p"`
    Ответ написан
  • Вылет при удалении динамического массива?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    char *s = new char[strlen(source) + 1];
    ...
    strcpy_s(s, strlen(s), source);


    strlen(s) -- вообще за гранью добра и зла и возвращает случайное число, по большому счёту. Потому что s -- только что выделенный неинициализированный массив.

    Вызов strcpy_s совершенно бессмысленный и неправильный. Бессмысленный, потому что ты только что выделил столько памяти, сколько данных в строке. strcpy_s имеет смысл, если буфер в который ты копируешь -- это массив фиксированной длины. Неправильный, потому что даже если ты имел в виду strlen(source), а не strlen(s), то должен был передать strlen(source) + 1, чтобы было куда 0-терминатор скопировать. Кроме всего прочего, strcpy_s ещё и возвращает код ошибки, который имеет смысл проверить.

    Лучше всего в этом месте было бы вызвать memcpy(s, source, strlen(source) + 1); или вообще выкинуть s = new char [...]; strcpy_s ... delete [] s; и заменить на s = strdup(source); ... free(s);
    Если очень хочется strcpy_s, то хотя бы так: strcpy_s(s, strlen(source) + 1, source);

    Исправление этого места починит и delete, потому что delete валится из-за того, что ты поломал heap.
    Ответ написан
    1 комментарий
  • Как исправить ошибку в коде c++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Замени head = malloc(sizeof(struct Node)) на head = new Node.
    Потому что malloc тебе конструктор std::string внутри data_list не вызовет.
    И не вставляй код картинками.
    Ответ написан
    Комментировать
  • Как соединить несколько RaspberryPi через I2C?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    А что делать дальше?

    Дальше надо узнать, что в I2C есть мастера и слейвы и копать куда-то туда.
    Ответ написан
    8 комментариев
  • Sed - как вывести все цифры до первой точки?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Мне нужно регулярное выражение, для sed, чтобы выводило цифры до первой точки:

    sed 's/\..*//'

    screen -x | grep "_vc" | sed '\Что-то_тут\'

    Можно сделать одним только седом: screen -x | sed -n '/_vc/s/\..*//p'

    И если я потом '| kill' добавлю, так будет работать?

    Нет. kill не читает ничего из стандартного ввода. Если ты хочешь передать эти номера как параметры kill нужно добавить | xargs kill
    Ответ написан
    Комментировать
  • Где найти актуальную версию arm тулчейна?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Видишь ли в чём дело, если ты используешь тулчейн сильно отличный от того, которым собраны библиотеки установленные на устройство, у тебя есть три варианта действий:
    - перестроить и обновить все библиотеки на устройстве.
    - создать отдельную иерархию каталогов /lib, /usr/lib, ... в которые сложить библиотеки (.so) нового тулчейна и тем или иным способом заставить исполняемые файлы собранные новым тулчейном использовать их.
    - линковать свои исполняемые файлы статически.

    В последнем варианте тебе подойдёт почти любой тулчейн, два других варианта -- более замороченные.

    https://elinux.org/Toolchains#Prebuilt_toolchains
    Ответ написан
    Комментировать
  • Преобразование char в const char*?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Имеется строка
    string message = "Hello!";
    Функция принимает const char*, мне нужно передать в неё первый символ этой строки.


    void f(const char *);
    
    string message = "Hello!";
    string message1(1, message[0]);
    f(message1.c_str());
    Ответ написан
  • Как правильно экранировать одиночные кавычки в linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как экранировать одинарные кавычки

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

    Оригинальный запрос можно написать так:
    grep -rnw /home/user/ -e "\$_GET['s']"
    но в любом случае он выглядит проблематично: $ в регулярке -- это конец строки, квадратные скобки -- это символ из набора...
    Ответ написан
    Комментировать
  • Thinstation как добавить xorg7-radeon?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я ничего не знаю про thinstation, но древний драйвер в X11 называется radeonhd, см. https://www.x.org/releases/individual/driver/
    Ответ написан
  • Как передать значение переменной в стек (Ассемблер)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Код может выглядеть как-то так:

    void OutFloat(double v);

    sub sp,16
    mov bp,sp
    fstp qword ptr [bp + 8]
    call OutFloat
    add sp,16


    Т.е. можно выгружать значение из сопроцессора прямо в то место, где будет исходящий параметр для вызова функции.
    Ошибка возникает из-за того, что нет команд mov пересылающих значение из памяти в память.
    Ответ написан
    5 комментариев
  • Как отсортировать матрицу?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Мне нужна хотя бы идея как это можно реализовать

    Это можно реализовать функцией qsort. Матрицу хранить по столбцам а не по строкам.
    Ответ написан
    Комментировать
  • Как удалить объект класса?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Она работает и выводит в консоль "destruct". Но после этого объект никуда не исчезает.

    Тебе предстоит узнать много нового. О том, что такое неопределённое поведение. О том, что удалять опреатором delete можно только объекты созданные оператором new. О том, что обращение к полям объекта после вызова деструктора -- это неопределённое поведение, так же как и вызов деструктора больше чем один раз. О том, что это забота программиста -- следовать правилам языка, а рантайм может закрывать глаза на ошибки, а может громко кричать и завершать программу при первой же возможности.

    Она работает и выводит в консоль "destruct". Но после этого объект никуда не исчезает. К нему по прежнему можно обратиться и вывести значения xy. При этом по завершению работы программы, в консоль выводится "destruct" второй раз.

    Ну а у меня твоя программа ожидаемо вылетает сразу же в месте вызова delete.

    как правильно уничтожить объект?

    Объект на стеке можно корректно уничтожить двумя способами: естественным -- выйдя из блока в котором он определён, и насильственным -- вызвав явно его деструктор и создав на его месте другой объект.
    Ответ написан
  • Как работать с комплексными числами в си?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    VS пишет...

    в С89 нет complex.h, он появился в C99. VS не поддерживает С99. Следовательно complex.h который у тебя есть -- нестандартный. Надо смотреть в него, чтобы понять, как его использовать.
    (Подозреваю, что надо выкинуть слово double из определений переменных).
    Ответ написан
    Комментировать
  • Как убрать кучу лишних веток в GitHub-репозитории?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Теперь в репозитории куча веток, от которых надо избавиться. Как?

    git push <remote> :<branch-name-1-to-delete> :<branch-name-2-to-delete> ...
    Ответ написан
    2 комментария
  • Как получить доступ к private полям без friend-функций?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Непонятно, в каких отношениях состоят List и Node.

    По-правильному, все поля класса должны быть приватными.

    По-правильному приватные поля должны быть приватными, а те, к которым нужен доступ извне -- публичными или защищёнными.
    Ответ написан
    Комментировать
  • Почему в программе утечка памяти?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Укажите на ошибки в коде

    Можно собрать программу с -g, и valgrind сам тебе укажет с точностью до строчки в исходниках, где была выделена утёкшая память.

    как мне вводить строку с неизвестной длинной?

    char *str = NULL;
    scanf("%m[^\n]", &str);
    Ответ написан
    5 комментариев
  • Как понять причину по которой не устанавливается ssh соединение по ключу?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    куда копать/как дебажить?

    Читать /var/log/auth.log (или куда настроен вывод sshd) на сервере.
    Ответ написан
    1 комментарий