• Ассемблер что не так с кодом?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    что не так?

    В видеорежиме 100h нет гарантии, что вся видеопамять доступна одним непрерывным куском. И если вызвать функцию 0x4f01 прерывания 0x10, то она вернёт структуру, в которой указан размер окна. Мне она возвращает 64К (0x40), что существенно меньше 640 * 400 = 256000:
    0x7c00:      mov    $0x4f01,%ax
       0x7c03:      mov    $0x100,%cx
       0x7c06:      mov    $0x7c77,%di
       0x7c09:      int    $0x10
    (gdb) x/6hx $di
    0x7c77: 0x00bb  0x0007  0x0040  0x0040  0xa000  0x0000

    Чтобы обратиться к остальной видеопамяти, нужно либо переключать банки видеопамяти функцией 0x4f05, либо как-то включать линейный доступ к видеопамяти.
    Ответ написан
    Комментировать
  • Почему программа вылетает при попытке выделить память с помощью new?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Используй valgrind, он тебе покажет, где ты обращаешься мимо выделенной памяти или используешь неинициализированные переменные.
    Ответ написан
    1 комментарий
  • Как разобрать унарный оператор в обратной польской нотации?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Все хорошо, но алгоритм не верно работает с унарным отрицанием.

    Он и не рассчитан на работу с унарным отрицанием.
    Как исправить?

    Проще всего -- введя для унарного отрицания специальный символ, отличный от остальных операторов.
    Иначе придётся вводить дополнительное состояние -- был ли предыдущий символ и был ли он оператором, и если так, то трактовать непосредственно следующий за ним оператор '-' как унарный.
    Ответ написан
    2 комментария
  • Assembler как работать с видеопамятью в защищенном режиме?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему-то закрашивается лишь меньшая часть екрана.

    По многим причинам:
    - ты забыл загрузить ds и es после перехода в защищённый режим
    - тебе нечем их загрузить, поскольку в gdt нет сегментов доступных для записи
    - адрес видеопамяти -- 0xa0000, а на 0xa000 как у тебя
    Ответ написан
    4 комментария
  • Ассемблер как работает адресация в защищенном режиме?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Вся проблема в том что не понимаю я структуры дескриптора..

    https://en.wikipedia.org/wiki/Global_Descriptor_Table в чём сложность?

    db 0xFF, 0xFF, 0x00, 0x00, 0x00, 10011010b, 11001111b, 0x00

    Segment limit: 0xfffff
    Base address: 0x00000000
    Type: 0xa
    S: 1
    DPL: 0
    P: 1
    A: 0
    DB: 1
    G: 1
    Т.е. этот сегмент действительный (P = 1), не системный (S = 1), начинается с адреса 0, покрывает 4Г, исполняемый и доступный для чтения (Type = 0xa), доступен из кольца защиты 0 (DPL = 0), не читанный (A = 0), со страничной гранулярностью (G = 1).

    Я не могу понять именно как происходит этот прыжок
    jmp 00001000b:pm_entry
    use32
    pm_entry:

    В cs попадает 0x8, т.е. CPL = 0, использовать 1ю запись в GDT, в pc -- pm_entry.
    Ответ написан
    Комментировать
  • Как вывести фрагмент из текстового файла в BASH?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    #! /bin/sh
    
    TOP=$(($1 + 1))
    BOT=$(($3 + 1))
    
    LEFT=$2
    WIDTH=$(($4 - $2 + 1))
    
    sed -n "$TOP,$BOT s/.\{0,$LEFT\}\(.\{0,$WIDTH\}\).*$/\1/p"

    $ ./win.sh 1 3 3 7
    У попа была собака,
    Он её любил.
    Она съела кусок мяса.
    Он её убил.
    её лю
     съел
    её уб
    $
    Ответ написан
    Комментировать
  • Проблема тактирования карты?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    НО ничего в таком случае не работает

    А с оригинальной формулой -- работает? Каковы значения sys_clk, F, D и baudrate?
    Ответ написан
    1 комментарий
  • Массивы char в c++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему выходит ошибка (error C2131) при использование в rev_list[n]?

    Потому что n -- не константа.
    Попробуй так, что ли:
    #include <iostream>
    #include <cstdlib>
    #include <cmath>
    
    using namespace std;
    
    int main() {
        char list[] = "asdf";
        const int n = sizeof(list);
        char rev_list[n];
        
        cout << rev_list;
    
        return 0;
    }
    Ответ написан
    Комментировать
  • Где посмотреть номера системных вызовов ядра Linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    - старое архитектурно-специфичное представление (определения в arch/*/include/uapi/asm/unistd.h, на примере MIPS)
    - старое архитектурно-независимое представление (определения в include/uapi/asm-generic/unistd.h, ими пользуется, например, ARM64)
    - новое представление (отдельный файл определений из которого генерируются заголовочные файлы),
    Ответ написан
    Комментировать
  • Как изменить вектор внутри map c++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    мне нужно обратиться к вектору по его ключу и изменить размер. Как мне это сделать?
    map<string, vector<string>> SOURCE;

    SOURCE["key"].resize(new_size);
    Ответ написан
  • Что за ошибка компиляции?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я скачал драва на свой wifi адаптер tl-wn722n

    Я бы смотрел сюда или сюда.
    Ответ написан
    Комментировать
  • Где найти информацию об архитектуре AVR?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    я хочу написать эмулятор микроконтроллера данной архитектуры, приближенный к МК ATmega 328... эмулятор данного МК должен быть весьма полезным для разработки.

    Не надо писать уже много раз написанное.
    Ответ написан
    Комментировать
  • Как смержить slave ветку в master с заменой всего содержимого?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Подскажите новичку, как смержить второстепенную (допустим slave) ветку в master, чтобы она заменила все содержимое master своим, а данные из master удалились.


    Чтобы был честный мёрж и непрерывная история:
    git checkout slave
    git merge -s ours master # смёржить master в slave, оставив только содержимое slave
    git checkout master
    git merge slave
    Ответ написан
    Комментировать
  • Зачем эти поля в control при сборке deb-пакета?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Чем отличаются поля Recommends и Suggests?

    https://www.debian.org/doc/debian-policy/ch-relati...
    https://www.debian.org/doc/manuals/debian-faq/ch-p...
    TL;DR: силой рекомендации (Recommends сильнее).

    Зачем нужно поле priority (приоритет), где оно проверяется/используется?

    https://www.debian.org/doc/debian-policy/ch-archiv...

    Зачем нужны пакеты, которые можно установить, но нельзя удалить?

    Чтобы пользователь себе систему с дуру не сломал.

    Зачем нужно поле Essential, если можно запретить удаление пакета через Priority?

    https://www.debian.org/doc/debian-policy/ch-contro...

    Можно ли все-таки удалить пакет и как, если Essential = yes или Priority = required?

    Priority = required -- как я понял -- да, Essential = yes -- как я понял -- нет.
    Ответ написан
    Комментировать
  • Ошибка при запуске Linux parrot?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что это значит?

    Это значит, что что-то пошло не так. Но самой ошибки на этом экране нет.
    Посмотри на вывод dmesg для начала.

    Выдает такое

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему, как исправить?

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Мне нужно, чтобы этот таймер был не на live cd, как во всех практически дистрах, а на другом пункте.
    Если это вообще возможно реализовать, то, пожалуйста, дайте мне об этом знать

    Возможно. Конфигурация загрузчика находится на liveCD в файле /isolinux/live.cfg можно посмотреть так:
    $ mkdir cd
    $ sudo mount -o loop Parrot-security-4.3_amd64.iso cd
    mount: /dev/loop0 is write-protected, mounting read-only
    $ head -n3 cd/isolinux/live.cfg
    label ^live
            menu label ^Live Mode
            menu default

    Вот это menu default нужно перенести в другое место.
    Как это сдеать? Проще всего хекс-редактором отредактировать iso. В свежескачанном 64-битном parrot security os iso эта строчка находится по адресу 0x546e024, ищется простым грепом:

    $ hexdump -Cv Parrot-security-4.3_amd64.iso | grep -A3 'label ^live'
    0546e000  6c 61 62 65 6c 20 5e 6c  69 76 65 0a 09 6d 65 6e  |label ^live..men|
    0546e010  75 20 6c 61 62 65 6c 20  5e 4c 69 76 65 20 4d 6f  |u label ^Live Mo|
    0546e020  64 65 0a 09 6d 65 6e 75  20 64 65 66 61 75 6c 74  |de..menu default|
    0546e030  0a 09 6c 69 6e 75 78 20  2f 6c 69 76 65 2f 76 6d  |..linux /live/vm|


    Вот например я сделал второй пункт пунктом по умолчанию:
    0546e000  6c 61 62 65 6c 20 5e 6c  69 76 65 0a 09 6d 65 6e  |label ^live..men|
    0546e010  75 20 6c 61 62 65 6c 20  5e 4c 69 76 65 20 4d 6f  |u label ^Live Mo|
    0546e020  64 65 0a 09 6c 69 6e 75  78 20 2f 6c 69 76 65 2f  |de..linux /live/|
    0546e030  76 6d 6c 69 6e 75 7a 0a  0a 69 6e 69 74 72 64 20  |vmlinuz..initrd |
    0546e040  2f 6c 69 76 65 2f 69 6e  69 74 72 64 2e 69 6d 67  |/live/initrd.img|
    0546e050  0a 0a 61 70 70 65 6e 64  20 62 6f 6f 74 3d 6c 69  |..append boot=li|
    0546e060  76 65 20 68 6f 73 74 6e  61 6d 65 3d 70 61 72 72  |ve hostname=parr|
    0546e070  6f 74 20 6c 6f 63 61 6c  65 73 3d 65 6e 5f 55 53  |ot locales=en_US|
    0546e080  2e 55 54 46 2d 38 20 6b  65 79 62 6f 61 72 64 2d  |.UTF-8 keyboard-|
    0546e090  6c 61 79 6f 75 74 73 3d  75 73 20 71 75 69 65 74  |layouts=us quiet|
    0546e0a0  20 73 70 6c 61 73 68 20  61 70 70 61 72 6d 6f 72  | splash apparmor|
    0546e0b0  3d 30 0a 09 0a 6c 61 62  65 6c 20 74 65 78 74 0a  |=0...label text.|
    0546e0c0  0a 6d 65 6e 75 20 6c 61  62 65 6c 20 54 65 72 6d  |.menu label Term|
    0546e0d0  69 6e 61 6c 20 6d 6f 64  65 0a 0a 6d 65 6e 75 20  |inal mode..menu |
    0546e0e0  64 65 66 61 75 6c 74 0a  09 6c 69 6e 75 78 20 2f  |default..linux /|
    Ответ написан
    2 комментария
  • Как по SSH с линукса на линукс получить доступ к GUI?

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

    Зависит от того, что подразумевается под "доступом к GUI". Есть как минимум два варианта:
    - возможность запускать GUI приложение на удалённой машине с отображением интерфейса на локальной машине
    - возможность взаимодействовать с локальной машины с дисплеем удалённой машины

    Первое делается либо тупо запуском приложения внутри сессии ssh -X, либо запуском удалённого vnc-сервера и присоединением к нему. "Тупо" -- потому что при обрыве связи в первом случае приложение будет потеряно, а во втором -- нет, можно будет присоединиться к vnc повторно и продолжить.

    Второе делается запуском x11vnc на удалённой машине с параметром -display указывающим на нужный X11-дисплей и последующим присоединением к этому vnc-серверу.
    Ответ написан
    Комментировать
  • Как считать строку из файла и записать числа в массив?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Мне дан файл input.txt, в котором находится строка, где через пробел указаны числа (их число неизвестно). Требуется узнать их сумму.
    ...
    мне кажется, что тут всё запутано и можно легче. Подскажите как.

    не заводить промежуточных массивов, считать всё на лету:
    0) нужно держать текущую сумму (S), инициализировать её нулём
    1) нужно держать значение прочитанного на данный момент числа (V), инициализировать его нулём
    2) читать из файла посимвольно
    -- если прочитанный символ -- цифра (d), добавить её к текущему числу: V = V * 10 + d
    -- если прочитанный символ -- не-цифра или конец файла, добавить текущее число к сумме и занулить текущее число: S = S + V; V = 0
    3) если конец файла, то вывести S и закончить работу, иначе продолжить с п. 2
    Ответ написан
    Комментировать