• Возможно отключить не-которые инструкций процессора?

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

    На x86 с виртуализацией -- да, возможно. Но не для произвольных инструкций, а только для тех, для которых это предусмотрено разработчиками. А кроме того…

    отключить инструкций процессора отвечающий за скорость майнинга

    …для майнинга используются те же инструкции, что и для воспроизведения видео, и проигрывания музыки, и просто арифметики. Невозможно глядя на отдельно взятую инструкцию сказать: "ага, тут происходит майнинг".

    умеют ли программы виртуализации такое проворачивать?

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как осуществить

    Подставить одно в другое:
    maxiter=$(( $(cat $1 | wc -l) - 1 ))
    Ответ написан
    Комментировать
  • Как сравнить вывод скрипта с файлом?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как все-таки правильно сверить, должно быть 100 процентное совпадение с эталонным файлом в результате команды должна быть 1.

    ./test.sh | if cmp -s - test ; then echo 1 ; else echo 0 ; fi


    result=$(./test.sh)| cmp -s $result test

    это почти попытка сравнить текст выводимый test.sh с содержимым файла test, но здесь не нужен конвейер и cmp так не работает.

    cmp -s (./test.sh) test

    Это почти рабочий вариант для bash, полностью рабочий выглядит так: cmp -s <( ./test.sh ) test. Но из-за того, что конструкция <(…) специфична для bash этот вариант на мой взгляд менее предпочтителен чем вариант ./test.sh | if cmp -s - test.
    Ответ написан
    Комментировать
  • Почему при использовании переменной в методе, выдает ошибку Linker Tools Error LNK2001?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему при использовании переменной в методе, выдает ошибку
    class Test
    {
      static std::string question;


    Потому что статическое поле класса нужно определить, его упоминание в определении класса -- это не определение. Определить его можно например так в .cpp вне всех функций:
    std::string Test::question;
    Ответ написан
    Комментировать
  • Хочу написать простенький симулятор процессора для уроков, какую выбрать систему команд?

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

    Для этого нужно ответить на вопросы: где вы собираетесь взять ассемблер и как конкретно вы собираетесь демонстрировать его работу?
    Я вижу два возможных ответа на первый вопрос: взять готовый или написать самому. Если цель -- написать самому, то это может быть сравнимо по сложности, если не сложнее, чем написать эмулятор для той же самой системы команд. Если брать готовый, я бы рекомендовал RISC-архитектуру, но все они с теми или иными заморочками, так что это будет выбор наименьшего из зол. На мой взгляд RISC-V, точнее базовый набор RV32I -- достойный кандидат.
    Ответ написан
    Комментировать
  • Одна мнемоника преобразуется в один код, или в разные?

    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, но нигде его не удаляешь и он продолжает тикать и после закрытия диалога.
    Ответ написан
    Комментировать