Задать вопрос
  • Как решить ошибку сборки bashdb?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Please specify the compatibility level in debian/compat
    or via Build-Depends: debhelper-compat (= X)

    Искал в тексте упоминания debhelper-compat, но не нашел.

    Насколько я понял этот документ, рекомендуется указывать зависимость от debhelper-compat вместо зависимости от debhelper. Т.е. надо самому написать
    Build-Depends: debhelper-compat (= 13), texi2html, texinfo
    Ответ написан
    Комментировать
  • Почему не выводятся не корректные результаты в квадратном уравнении?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему выводятся некорректные результаты в квадратном уравнении?
    double discriminant = (b * 2) - 4 * (a * c);

    Потому что в этом месте должно быть не b * 2, а b2
    Ответ написан
    1 комментарий
  • Почему для счётчиков не используют беззнаковые (unsigned) числа?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Часто вижу в коде на C++ и C#, что для счётчиков … используют int, а не uint/unsigned int.
    Почему праграмисты делают это?

    Я слышал следующую теорию, почему это имеет смысл в С++: потому что значение знакового типа в корректно написанном коде не переполняется. (А если таки случилось переполнение, то это UB и всё уже не важно). Поэтому если счётчик имеет знаковый тип и с ним на каждой итерации происходит, например, инкремент, то значение счётчика только увеличивается. Это, в свою очередь, даёт дополнительные возможности для оптимизации. Беззнаковый счётчик инкрементируемый на каждой итерации может внезапно обнулиться, это может быть легальным поведением программы на которое рассчитывает программист.

    А почему они фактически используют int -- наверняка потому что никакой практической разницы не видно, а буков нужно меньше.
    Ответ написан
    2 комментария
  • Как передать двумерный массив функции?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как передать двумерный массив функции?

    https://qna.habr.com/answer?answer_id=513953#answe...
    Ответ написан
    Комментировать
  • Запуск python скрипта из bash. No such file or directory. Как это решить?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    "$str2$str1"
    '/usr/bin/python3 /opt/uccx-stats/uccx_parse.py /opt/uccx-stats/_uccx_csqstats.txt "FCCPS-CSQ - loggedinagents"'

    подскажите, как это победить

    убрать кавычки там где они не нужны, добавить кавычки там, где они нужны:
    #!/bin/bash
    set -x
    #Запуск скрипта в формате ./csqstats CSQ_name  param
    str1="$1 - $2"
    str2="/usr/bin/python3 /opt/uccx-stats/uccx_parse.py /opt/uccx-stats/_uccx_csqstats.txt"
    $str2 "$str1"
    Ответ написан
    Комментировать
  • Почему биты в регистре архитектуры AVR заносяться именно посредством сдвига 1 на этот бит влево?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему нельзя занести этот бит в регистр без сдвига, зачем это придумано
    UCSRA |= (1<<U2X);

    В заголовочных файлах U2X определён как "номер бита U2X в регистре UCSRA", т.е. 1.
    Если бы U2X был определён как "битовая маска поля U2X в регистре UCSRA" (т.е. 2), то все бы писали UCSRA |= U2X;. В ассемблерном коде avr оба эти варианта превратятся в инструкцию sbi UCSRA, 1, устанавливающую бит в регистре по номеру.

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

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

    Потому что современные ОС делают это намеренно, чтобы затруднить эксплуатацию уязвимостей в ПО. Это называется ASLR: address space layout randomization. Обычно есть способ отключить ASLR глобально либо для отлаживаемых программ, чтобы добиться воспроизводимости результатов.
    Так, например, в linux это делается глобально с помощью файла /proc/sys/kernel/randomize_va_space либо командой setarch -R для одного конкретного процесса. Отладчик gdb по умолчанию отключает ASLR для отлаживаемых программ.
    Ответ написан
    3 комментария
  • Какой тип виртуальной памяти Сегментная или Страничная, сейчас используется? Как утроена виртуальная память?

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

    На виндовс, icore 5 процессоре вот сейчас, какой тип памяти работает. И какой тип виртуальной памяти на Risc 5 архитектурах.

    Забудь про сегментную организацию, она есть только в семействе x86, была сильно урезана в x86_64 и в современных ОС почти не используется.

    Вот запускается программа. Что происходит. Типа создается процесс, в MMU в таблице страниц генерируется номер страницы PID>>24 + 0x4000000h адрес примерно. И заноситься в таблицу (https://ru.bmstu.wiki/MMU_(Memory_Management_Unit) ) Создаются типа страницы для данных. Окей

    Это какое-то странное описание, особенно часть PID>>24 + 0x4000000h, это вообще что?
    Если программа получает новое адресное пространство, то оно изначально пустое, программа ни с кем его не делит. Есть вот такая книжка про организацию памяти в linux: https://pdos.csail.mit.edu/~sbw/links/gorman_book.pdf Рекомендую ознакомиться с главой 4.

    как программа вообще может в такой системе вызвать функцию из внешней библиотеки

    первым делом программа загружает внешнюю библиотеку в своё адресное пространство. Дальше уже понятно?

    Что за таблица дескрипторов. Где она находиться.

    Находится где-то в физической памяти. Определяет свойства, размеры сегментов и в какие линейные адреса преобразуются логические адреса внутри этих сегментов. Если ты прочитал про линейные адреса эта часть должна тебе быть понятна. В современных ОС все процессы используют один и тот же селектор для кода и один и тот же селектор для данных, а логические адреса cs:0 ds:0 es:0 и ss:0 транслируется в линейный адрес 0. Это называется "плоская модель памяти".

    Как связана с таблицей страниц?

    Никак. Совершенно ортогональная структура, может работать даже когда страничная адресация выключена.

    Что в конечном итоге храниться TLB буфере????

    Мэппинг "линейный адрес" -> "физический адрес".
    Ответ написан
  • Как показать переменную на русском языке LCD_1602_RUS?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как можно вставить сюда переменную?

    Сюда можно вставить переменную тип которой -- wchar_t *
    Ответ написан
    8 комментариев
  • Как разделить передаваемые программе аргументы в баш-скрипте?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    С минимальными изменениями можно сделать вот такой рабочий вариант:
    #!/bin/bash
    function generateArgs(){
     echo --arg1=$somevar1 \"--arg2=$somevar2 and spaces\" ... --arg1337=$somevar1337
    }
    eval "args=($(generateArgs))"
    exec java "${args[@]}"

    Т.е. каждый отдельный аргумент в котором могут быть пробелы вывести с кавычками и собрать их в массив. Элементы массива в подстановке "${args[@]}" передаются поотдельности и пробелы внутри них обрабатываются правильно.

    Но это, конечно, коряво и лучше переделать функцию, чтобы она собирала массив аргументов по-человечески.
    Ответ написан
    Комментировать
  • Какие есть специфичные функции для glibc?

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

    Можно начать отсюда.
    Из моего опыта, самое часто всплывающее отличие glibc от других libc -- поддержка версионирования символов.
    Ответ написан
  • Точка останова, Ptrace. Почему крашится программа после снятия точки останова?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В чем проблема? Что я делаю не так?

    Я подозреваю, что не нужно делать regs.rip -= 1 ;, потому что процесс не может "выполнить" точку останова.
    Ну и для надёжности, я бы убедился, что в памяти куда пишется 0xcc действительно до этого было 0x55.
    Ответ написан
  • Как задать выравнивание в массиве?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Могу ли я не используя vec4, задать выравнивание элементам массива?

    Не используя для элементов массива другой тип -- нет, не можешь. Не обязательно испольовать для этого vec4, можно завести какой-нибудь другой тип, породив его от vec3 и задав нужное выравнивание.
    Ответ написан
    Комментировать
  • Шифрование для защиты от MITM?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Можно ли как-то защититься от этого; есть ли для этого какие-то специальные протоколы?

    Для этого бывают key signing party, когда сопоставление ключа и владельца происходит очно.
    Либо PKI, если не стрёмно отдать эту функцию на аутсорс.
    Ответ написан
    Комментировать
  • Как в конвейерном 32bit процессоре передается команды записи в Reg 32 Битного значения??

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    А как передать-то 32 битное значение в команде в 32 бит?
    Логично что после команды значение(или адрес). Но тогда же получается какое-то нарушение логики.

    В RISC-процессорах -- никак. Они либо имеют команду загрузки 32-битного значения (литерала) из памяти относительно PC или специально выделенного регистра (например ARM: LDR r [pc, #offset_to_literal_pool], XTENSA: l32r at, label), при этом в команде кодируется смещение адреса литерала относительно PC. Либо загружают значения по частям, двумя или более командами (например MIPS загружает 16-битные части двумя разными инструкциями: lui rt, high16 ; ori rt, low16, XTENSA загружает 16-битные части двумя одинаковыми инструкциями: CONST16 at, high16 ; CONST16 at, low16, RISC-V загружает 20 и 12-битные части: auipc rd, symbol[31:12] ;addi rd, rd, symbol[11:0]).
    Хотя в принципе тот же RISC-V имеет нефиксированную длину команд, так, что какой-нибудь разработчик может завести, скажем, 6-байтовую команду загрузки 32-битного непосредственного значения в регистр, однако, насколько мне известно, никто этого не делает.
    Ответ написан
    Комментировать
  • Что находится по этому адресу в памяти?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему дефолтные значения выглядят так (первые два скришота)

    Потому что это адреса. 8 байт адреса, на втором скрине первый -- 0x12df11a80, второй -- 0x12df11a60
    Ответ написан
    2 комментария
  • Почему timeout неправильно завершает скрипт?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Timeout шлёт сигнал sigint если приложение не завершилось за определенное время.

    Нет, по умолчанию он шлёт SIGTERM. Чтобы он слал SIGINT воспользуйтесь ключом --signal=INT (см).

    Почему после окончания таймаута, утилита завершается, но без надписи "session saved"?

    Потому что не тот сигнал?
    Ответ написан
    Комментировать
  • Описание грамматики, где ошибка?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Вот описание

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Иван Четчасов в твоих вопросах повторяется один и тот же паттерн: у тебя что-то не работает, ты приводишь обрывок кода (обычно не относящийся к проблеме) и ничего не говоришь о том, как ты пытался решить проблему.
    Я предлагаю тебе сделать следующее с этим и всеми последующими вопросами:
    - добавить в вопрос ссылку на репозиторий со всем кодом который можно было бы склонировать и собрать
    - добавить в вопрос описание того, как ты запускаешь код, так, чтобы кто угодно мог воспроизвести твои результаты
    - добавить в вопрос описание того, как ты пытался диагностировать и решить проблему

    Без этого создаётся впечатление, что ты просто приходишь сюда покрасоваться.

    В приведённом коде я не вижу никаких проблем.
    Ответ написан
    3 комментария
  • Как обойти iOS ASLR используя LLDB?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Начало TEXT минус конец PAGEZERO, получается 0x104a60000 - 0x100000000 = 0x4a60000 (делта смещение)

    Ты что-то странное тут посчитал. TEXT у тебя лежит начиная с адреса 0x104a60000, вот этот адрес и надо использовать.

    Вот адрес ,к примеру, на котором я хочу установить breakpoint

    Тебе ещё надо знать, с какого адреса T начинается TEXT в дизассемблере. Тогда для произвольного адреса A внутри TEXT адрес в отладчике будет A - T + 0x104a60000.
    Ответ написан
    Комментировать