• Одна мнемоника преобразуется в один код, или в разные?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Скажите, машинный код команды будет один и тот же, или различный?

    Первая ссылка по запросу mov x86 в гугле: https://c9x.me/x86/html/file_module_x86_id_176.html
    Ответ написан
    Комментировать
  • Можно ли явно указать адрес загрузки ядра в grub?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Если ядро -- это miltiboot образ, то в его заголовке записаны адрес загрузки и точки входа. Можно их поменять и обновить контрольную сумму в заголовке.
    Ответ написан
    Комментировать
  • Как лучше это сделать?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    в скрипте линкера есть такая строка . = 0x100000;. Знаю, что grub загружает по этому адресу ядро

    нужно чтобы grub по прежнему загружал ядро по адрсесу 0x100000. А адресация внутри ядра происходила по виртуальному адресу, допустим 0x60000000

    Для начала нужно понять откуда grub берёт адрес для загрузки. Если из образа ядра, то я вижу один возможный вариант решения, если нет -- то два.
    Универсальное решение -- разбить ядро на две части: выполняющуюся сразу после загрузки и до включения виртуальной адресации и выполняющуюся с виртуальной адресацией. Линковать их двумя отдельными командами с разными скриптами линковщика, образ второй части встраивать в первую через какой-нибудь .incbin. Так делает ядро linux. Отсюда можно проследить как это делается.
    Не универсальное решение на случай, когда grub берёт адрес загрузки не из образа ядра, а часть кода работающая до переключения на виртуальную адресацию сравнительно проста -- сделать код этой части независимым от адреса загрузки, а образ ядра линковать для конечного виртуального адреса.
    Ответ написан
    2 комментария
  • Почему при объявлении итератора выдается ошибка?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    ListIterator - это класс итератора, который у меня определён ниже основного класса

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    sed -e '/\n\/\s/g'
    Но почему ентер не меняется на пробел.

    Что тут вообще написано? Судя по g в конце имелось в виду 's/\n/ /g'?
    Не работает потому что sed читает ввод построчно и конец строки как символ обычно не попадает в паттерн спейс. Но есть команда N которая добавляет \n и следующую строку к уже прочитанной: speedtest --simple | sed '1d;N;s/\n/ /g'
    Ответ написан
    4 комментария
  • Почему не срабатывает условие в bash-скрипте?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему не срабатывает условие в bash-скрипте?

    Потому что не хватает пробелов: вот так [[ "$ip" != "127.0.0.1" ]] будет работать.
    Ответ написан
    Комментировать
  • Как с помощью консоли сделать lst файл, masm32?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    .lst обычно называют листинги ассемблера, которые показывают, в какие конкретно байты были оттранслированы инструкции ассемблера. Для masm это делается ключом /Fl, а деталями листинга можно управлять ключами /S*, см.

    проблема в том что надо не через линк а через link16 тогда работает,

    тогда, возможно, тебе нужен не листинг ассемблера, а мэп линковщика. Его вывод можно включить опцией линковщика /MAP.
    Ответ написан
    Комментировать
  • Для чего на ZX Spectrum сделали USR функцией?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Смысл функции - возвращать результат обработки аргументов, а здесь просто запускается программа в машинных кодах по заданному адресу.

    Ну вообще она может возвращать значение записанное вызванным кодом в регистровую пару BC:
    poke 30000, 1
    poke 30001, 99
    poke 30002, 0
    poke 30003, 201
    print usr 30000
    > 99

    можно проверить в онлайн-эмуляторе.
    spoiler
    poke == o
    print == p
    usr == ctrl+shift l
    Ответ написан
  • Как перенаправить сеть между виртуалкой и хостом без iptables и прочих?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Запускать qemu с сетевым адаптером подключенным к tap, а tap-интерфейс объединить в бридж с нужным хостовым адаптером. Типа того: https://www.linux-kvm.org/page/Networking#Public_Bridge
    Ответ написан
    Комментировать
  • Как правильно подключать make-файл из одной директории к make-файлу из другой?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    зачем с помощью инклуда в Makefile_a указывать путь к Makefile_aa, и во втором указывать тоже путь к файлам как будто это делаеться из Makefile_a?

    затем, что нет никакой магии в подключении одного Makefile в другой, это просто текстовая подстановка, точно такая же, как если ты физически перенесёшь текст второго Makefile в то место первого где написан include.
    Ответ написан
    Комментировать
  • Как получить указатель на функцию класса?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что будет?

    В данном примере -- то же самое, как если просто написать obj->execute(), т.е. виртуальный вызов конечного переопределения для функции obj1::execute в объекте класса obj3. См. eelis.net/c++draft/expr.call#3

    Я не понимаю как это будет работать с классами наследниками и виртуальной функцией.

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    apt-get install gcc-aarch64-linux-gnu

    после этой команды команда dpkg -L gcc-aarch64-linux-gnu покажет тебе содержимое пакета, откуда ты узнаешь, что имя компилятора -- aarch64-linux-gnu-gcc
    Ответ написан
    1 комментарий
  • Почему пишет ошибка при чтении данных?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему в 93 строке (bptr = (schoolboy*)&a1;) пишет progress=<Ошибка при чтении символов строки>

    Я уверен, что пишет он это на самом деле вот здесь: cout << *bptr;, а происходит это потому что bptr указывает на объект, конечный тип которого -- class student. У такого объекта в его представлении в памяти нет никакого поля progress, поэтому код который пытается его вывести ведёт себя таким образом. Вообще это пример неопределённого поведения.

    как это исправить?

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Возможно ли это?

    В gdb есть вот такая штука: https://www.sourceware.org/gdb/news/reversible.html
    Т.е. ответ для gdb -- возможно, но при определённой подготовке и с определёнными ограничениями.
    С другой стороны, во всяких coresight есть возможность записывать выполненные процессором переходы, но это нужна железка с поддержкой этой технологии и железка которая будет собирать эти логи.
    Ответ написан
    Комментировать
  • Как создать массив хендлов на MASM?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Для полноты картины не хватает определений hBmp, hbtm и hInstance.
    Косяк бросающийся в глаза сразу -- ты создаёшь таймер в обработчике WM_INITDIALOG, но нигде его не удаляешь и он продолжает тикать и после закрытия диалога.
    Ответ написан
    Комментировать
  • Почему вылетает программа?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Написал простую программу, которая висит, ожидая нажатие клавиши, но она не висит, а вылетает

    format PE console
    …
                    push str1
                    call [printf]
    
                    mov ah, 7
                    int 21h

    интересная попытка, но почему печать -- вызовом функции, а ввод символа -- вызовом досовского прерывания,
    если для печати тоже есть досовское прерывание?
    Если серьёзно, нельзя вызывать досовские прерывания из приложения win32. Ищи подходящую функцию win32 API.
    Ответ написан
    Комментировать
  • С чем связяна эта ошибка (SFML)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Скачал библиотеку, подключил ее в параметрах проекта

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

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

    в posix есть вот такой интерфейс, в конце мануала есть пример.
    Ответ написан
    Комментировать
  • Как записать в переменную типа char строку неизвестной длины из файла?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    C++
    Нужно в двумерный массив char записать эти строки

    Если это С++, то строки -- это std::string, массив -- это std::vector, используй std::getline и например std::vector::push_back.
    Если это массив char, то это C и выделение памяти по мере надобности функцией realloc.
    Ответ написан
    3 комментария
  • Где утечка памяти?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    for (size_t i = iters.size(); i < listsize; i++) {
        iters.push_back(new iterator(typesize));
      }

    для такого кода создания код удаления должен вызывать delete а не просто деструктор, т.е.
    for (size_t i = iters.size(); i > listsize; i--) {
            delete *iters.back();
            iters.pop_back();
          }


    iterator::~iterator() {
      for (stream::stream* s : usedbystreams) {
        s->killstream(0);
      }
      free(pointer);
      usedbystreams.clear();
    }

    И опять, ты вызвал s->killstream(0), привело ли это к удалению объекта на который указывает s?

    Вообще существуют инструменты для отладки работы с памятью, для gcc это прекрасный -fsanitize=address который покажет тебе при завершении программы, где была выделена утекшая память.
    Ответ написан
    Комментировать