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

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

    Затем, что препроцессор -- это отдельная программа с отдельным языком? Внутри препроцессируемого файла может быть что угодно, не обязательно код на С или С++. Так, например, linux препроцессирует скрипты линковщика перед тем как использовать их. И исходники написанные на ассемблере, хотя у ассемблера есть собственные макросы, директивы для включения файлов и условной компиляции.
    Ответ написан
    4 комментария
  • Как иизменить параметр tdp_mmu?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как иизменить параметр tdp_mmu?

    стандартный способ
    echo N | sudo tee /sys/module/kvm/parameters/tdp_mmu
    не помогает?

    root@Line-host:~# echo "options kvm tdp_mmu=N" >/etc/modprobe.d/kvm-disable-tdp-mmu.conf
    root@Line-host:~# cat /sys/module/kvm/parameters/tdp_mmu
    Y

    Ну а чего ты ожидал, параметры из modprobe.d применяются при загрузке модуля. Можно сделать rmmod kvm ; modprobe kvm чтобы убедиться, что параметр применяется.
    Ответ написан
  • Почему возникает ошибка?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему возникает ошибка?

    Потому что это не С++ код. Designated initializers есть в C начиная с C99 и в C++ есть начиная с C++20, но в С++ версии полно дополнительных ограничений.
    Ответ написан
    Комментировать
  • Почему не отрабатывает команда awk (Bash)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    {i++;print "Memory "i"}
    В чем проблема?

    В этом выражении 3 кавычки. Если убрать лишнюю {i++;print "Memory "i} всё работает.
    Ответ написан
    4 комментария
  • Linux NetworkManager аварийная остановка?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Любая команда start/stop/restart NetworkManager выдает одно и тоже

    Напомнило анекдот
    Доктоp, я кажется умиpаю! Куда ни ткну пальцем-везде такая боль! -Э-э, дpужочек, так у вас же палец сломан!

    sudo: resolve_conf.c:571: update_from_conf: Assertion 'resolve_conf_matches (resp, conf)' failed

    Это сообщение о том, что sudo сломался. Вспоминай что менял и возвращай обратно. Cудя по тексту ошибка может быть вызвана содержимым /etc/resolv.conf.

    Или воспользуйся su, например.
    Ответ написан
  • Почему компиляция жалуется на инциализацию lcd дисплея?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему компиляция жалуется на инциализацию lcd дисплея?

    вот он же тебе прямо пишет:
    class LiquidCrystal_I2C' has no member named 'init'

    Почему ты думаешь, что эта функция существует?
    Ответ написан
    2 комментария
  • Как написать Netflow сенсор с нуля?

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

    Для этого тебе надо понять, что такое "потоки" о которых ты говоришь, где находится информация о принадлежности пакета потоку и как до неё добираться.

    Если ограничиться определением по ссылке, то тебе надо будет разбирать сырые пакеты до сетевого уровня, откидывать не-IP, из IP извлекать IP-протокол, адрес источника, адрес назначения и тип сервиса, для протоколов TCP и UDP дополнительно извлекать порт источника и порт назначения. Всё это довольно просто сделать самому вооружившись RFC по упомянутым протоколам. Также надо будет понять, что делать с фрагментированными IP-пакетами.
    Ответ написан
    Комментировать
  • Почему вычитается 32?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему вычитается 32?

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

    pushq   %rbp
    movq    %rsp, %rbp
    subq    $32, %rsp
    movsd   %xmm0, -24(%rbp)
    movsd   %xmm1, -32(%rbp)

    -- сохранил два аргумента по смещениям -32 и -24

    movsd   -32(%rbp), %xmm0
    subsd   -24(%rbp), %xmm0
    movsd   %xmm0, -8(%rbp)

    -- сохранил их разность по смещению -8

    movsd   .LC0(%rip), %xmm0
    divsd   -8(%rbp), %xmm0
    movsd   %xmm0, -16(%rbp)

    -- сохранил частное от деления MAX_RAND на разность по смещению -16

    4 слота по 8 байт -- 32-байтный стековый кадр.
    Ответ написан
    3 комментария
  • Почему линкер дает такую ошибку?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    relocation R_X86_64_32S against `.text' can not be used when making a shared object
    что делать?

    Переписать код так, чтобы избавиться от этой релокации.
    Для этого посмотреть где она: objdump -dr lib.o

    27:   0f 01 1c 25 00 00 00    lidt   0x0
    2e:   00 
                            2b: R_X86_64_32S        .text


    и переписать загрузку idt без использования константного адреса, например так (используя адресацию относительно pc):
    lea rax, [rel idtDescriptor]
    lidt [rax]


    Однако, я подозреваю, что этого будет недостаточно, потому что
    dq _idt
    -- это ещё одна релокация в текстовом сегменте. Я не вижу как от неё можно избавиться кроме перемещения этой переменной в сегмент .data или .bss и инициализации этой переменной в процессе выполнения программы.
    Ответ написан
    3 комментария
  • Изминение запроса Amazon DynamoDB?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Слишком мало информации.
    Я долго изучал код

    Только по выводу дизассемблера или отладчиком ходил?
    пытался менять ... "0x013ded84 ldr x1, [x8, 0x250]"

    Выглядит разумно, но стоило бы под отладчиком посмотреть, что в x1 оказывается после этой инструкции. Я подозреваю, что адрес строки в памяти, а значит случайные изменения адреса откуда x1 загружается почти наверняка ничего не дадут.
    Задача либо понять "1" на любое нужное число, либо сделать так чтобы количество скачиваний было равным цене товара.

    Можно попробовать сохранить x1 каким он приходит к адресу 0x13ded40 в каком-нибудь callee-saved регистре (например x24) и перезагрузить обратно его вместо инструкции по адресу 0x13ded84. Как раз между этими адресами есть один nop и adrp x8, 0x2d71000 который теперь будет не нужен.
    Ответ написан
    1 комментарий
  • Как подключить несколько android-эмуляторов через adb?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как подключить несколько android-эмуляторов через adb?

    Используй ключ adb -s или переменную окружения $ANDROID_SERIAL. См.
    Ответ написан
    Комментировать
  • Как передать массив вместо аргументов?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Если я правильно понял вопрос, то наиболее похожее из того что мне известно -- это семейство функций getcontext/makecontext/setcontext/swapcontext и __builtin_apply. И то и другое -- не готовое решение, с форматом передаваемого участка памяти прийдётся разбираться, а __builtin_apply определённо завязано на архитектуру и ABI и это gcc-specific.

    Но я думаю, что это неправильный подход к решению и вообще сам вопрос -- неправильный подход к решению. Если ты пишешь транслятор, то для функций с фиксированным набором аргументов ты можешь тупо сгенерировать код вызова функции удовлетворяющий всем правилам C++.
    Ответ написан
  • Что делать если компилятор nasm работает неправильно?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    выдает непонятную фигню

    Ну в программе нет проверки ввода, поэтому если вводить непонятную фигню, то и выводить она будет непонятную фигню. А если вводить цифры, так чтобы сумма не превышала 9, то приведённая программа прекрасно работает.
    Это, правда не значит, что в этой программе нет ошибок. Я вижу как минимум одну:
    res resb 1 
    …
    mov [res], eax

    классическое переполнение буфера. Её наличие, правда, на результат повлиять не может.
    Ответ написан
    Комментировать
  • Зачем нужен signed в Си?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    по умолчанию int является signed

    А вот о char этого сказать нельзя, знаковость char зависит от реализации. Вдобавок, в стандарте есть следующая сноска (https://www.open-std.org/JTC1/SC22/WG14/www/docs/n... 6.2.5:15):
    Irrespective of the choice made, char is a separate type from the 
    other two and is not compatible with either.


    signed char -- это, пожалуй, единственное не вызывающее вопросов применение ключевого слова signed в C-коде написанном человеком. В остальных случаях роль signed -- чисто декоративная.
    Ответ написан
    Комментировать
  • Как сделать, чтобы printf() заменял -nan на любой заданный символ?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как сделать, чтобы вместо -nan печатался символ "-" ?

    Только добавив свою логику в свою программу, проверяющую значение на NaN и печатающую в зависимости от этого то или иное значение. С помощью стандартного printf -- никак.
    Ответ написан
    Комментировать
  • Как хранить два натуральных числа в одном, не превышающем их произведение (границы множества чисел для обоих из чисел известны)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    все это не подходит, так как мне нужно чтобы полученное число c лежало в промежутке [0; 11]


    Ну так a * (max(b) + 1) + b же.
    Иными словами мы делаем двузначное число в позиционной системе исчисления с неравными весами разрядов, младший разряд -- b, старший разряд -- a. Вес младшего разряда -- 1, вес старшего -- max(b) + 1.
    Ответ написан
    6 комментариев
  • Как из vector с int8_t получить int число?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как получить то же самое в С++?

    например так:
    uint8_t foo[] = {7, 7};
    int i = foo[0] + 256 * foo[1];


    В js я могу получить это так
    Int8Array

    Скажи,
    - а что будет, если элемент массива foo будет иметь отрицательное значение?
    - а что будет, если твой код запустить на архитектуре с порядком байт big-endian?
    Ответ написан
  • Указатели в языке Си?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему программа завершилась? Вмешалась ОС? Но если так, то почему?

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

    Почему я не могу поменять значение самого указателя (ведь указатель - это всего лишь ссылка на адрес памяти, а не на значение).

    Значение указателя ты поменять можешь, но это не то, что было написано в коде. В коде было написано поменять значение на которое указатель указывает. Поменять указатель было бы a = (int *)10;

    могу ли я указателю дать ссылку на конкретную ячейку в памяти?

    Можешь, но под ОС с виртуальной памятью это в большинстве случаев не имеет смысла. API в таких ОС обычно устроены так, что ты просишь выделить область памяти с заданными характеристиками, а ОС выполняет выделение и возвращает тебе адрес выделенного участка.

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

    В памяти всё хранится как последовательность байтов. Любую последовательность байтов можно проинтерпретировать как указатель. Но чтобы компилятор С понял что ты имеешь в виду, ему надо явно сказать, что ты хочешь проинтерпретировать целое число как адрес: int *a = (int *)0x0061FF18;
    Ответ написан
    Комментировать
  • Ошибка bin: fatal: more than one input file specified: BootLoader.asm?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    more than one input file specified
    nasm -felf64 bin BootLoader.asm -o BootLoader.bin

    nasm как бы говорит тебе: "выбери, или ты ассемблируешь bin или BootLoader.asm"
    Если же ты хотел формат 'bin', то выкинь -felf64 и замени его на -fbin.
    Тебе, правда, при этом прийдётся добавить что-нибудь типа use64 в исходник, чтобы сказать, что он не 16-битный.
    Ну и к тому же message у тебя лежит перед кодом, в той же секции, хороший bin из этого не получится.
    Ответ написан
  • Что нужно написать, чтобы загрузчик ос передавал управление коду в втором секторе?

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

    Нужно написать запрос в гугле: загрузчик ос и потом немного почитать.
    Ответ написан
    Комментировать