Проблема с циклами в защищенном режиме

Тема в разделе "WASM.BEGINNERS", создана пользователем TolyProg, 6 апр 2020.

  1. TolyProg

    TolyProg New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2020
    Сообщения:
    16
    Пишу я ОС.
    Назвал ее PicOS, вот репа: https://bitbucket.org/tolyprog/picos
    Тестирую ее на эмуляторе Qemu, если это на что-то влияет, то моя основная ос - Arch Linux.
    Дело в том, что при тестировании экран странно себя ведет: очень быстро сначала выводится сообщения BIOS, потом резко сменяется на сообщения, которые вывели загрузчик и ядро. Причем так роисходит со всеми циклами.
     
  2. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    TolyProg, отладчиком пробовали подключиться ? посмотреть что происходит.
     
  3. TolyProg

    TolyProg New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2020
    Сообщения:
    16
    TermoSINteZ, нет, т.к. я не смог его подключить к qemu (оправдание:мне 13)
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
  5. TolyProg

    TolyProg New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2020
    Сообщения:
    16
    TermoSINteZ, я не использую IDA
    --- Сообщение объединено, 6 апр 2020 ---
    Я подключился через gdb к qemu по pid и прописал stop. В итоге, остановилась не ос, а qemu.
    --- Сообщение объединено, 6 апр 2020 ---
    Может что-нибудь есть в qemu monitor?
     
  6. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    TolyProg, так и должно быть. У вас останавливается qemu - но вы должны в отладчике (gdb) его запустить.
     
  7. TolyProg

    TolyProg New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2020
    Сообщения:
    16
    TermoSINteZ, я понял, что дальше?
    --- Сообщение объединено, 6 апр 2020 ---
    Прописав info qemu я нашел:
    --- Сообщение объединено, 6 апр 2020 ---
    Запускаю qemu этой командой:
    Код (Text):
    1. qemu-system-x86_64 -hda bin/os
    Что мне прописать для отладки?
     
  8. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    TolyProg,
    то есть будет:
    qemu-system-x86_64 -hda bin/os -s -S
     
  9. TolyProg

    TolyProg New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2020
    Сообщения:
    16
    @TermoSINteZ,я прописал qemu-system-x86_64 -hda bin/os -s wait gdb connection to port 1234
    --- Сообщение объединено, 6 апр 2020 ---
    Что мне прописать в параметры gdb?
    --- Сообщение объединено, 6 апр 2020 ---
    TermoSINteZ, я прописал qemu-system-x86_64 -hda bin/os -s -S
    В окне qemu написано "Guest has not initialized the displqy (yet)."
     
  10. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    ну обычно запускают gdb
    а дальше вводят
    А по поводу qemu . попробуйте добавить параметр -nographic
     
  11. TolyProg

    TolyProg New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2020
    Сообщения:
    16
    TermoSINteZ, gdb сказал мне:
    . И да, перед этим я запустил qemu-system-x86_64 -hda bin/os -s -S -nographic &
    --- Сообщение объединено, 6 апр 2020 ---
    127.0.0.1 тоже пробовал
     
  12. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    TolyProg,
    а после запуска эмулятора в списке портов - порт появился ?
     
  13. TolyProg

    TolyProg New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2020
    Сообщения:
    16
    TermoSINteZ, в каком еще списке портов?
    --- Сообщение объединено, 6 апр 2020 ---
    Никогда на пользовался отладчиками
     
  14. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    TolyProg, ну в системе всегда можно посмотреть список открытых, слушающих на прием входного соединения - портов.
    обычно это что-то вроде
     
  15. TolyProg

    TolyProg New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2020
    Сообщения:
    16
    TermoSINteZ, нет порта 1234, и при запуске qemu-system-x86_64 -hda bin/os -s -S -nographic & еще написано, мол задача остановлена(ну это и понятно, -s -S же).
     
  16. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    значит проверил у себя на убунте
    > qemu-system-x86_64 -s -S -nographic
    warning: TCG doesn't support requested feature: CPUID.01H:ECX.vmx [bit 5]

    далее запускаю :
    sudo netstat -tunlp
    Код (Text):
    1. Active Internet connections (only servers)
    2. Proto Recv-Q Send-Q Local Address           Foreign Address         State            PID/Program name
    3. tcp     0            0             0.0.0.0:1234              0.0.0.0:*                     LISTEN      6125/qemu-system-x8
    4. ...
    Далее чекаю gdb
    (gdb) target remote 127.0.0.1:1234
    Remote debugging using 127.0.0.1:1234
    warning: No executable has been specified and target does not support
    determining executable automatically. Try using the "file" command.
    0x0000fff0 in ?? ()

    Все работает.
     
  17. TolyProg

    TolyProg New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2020
    Сообщения:
    16
    Код (Text):
    1. $ sudo netstat -tunlp
    2. Active Internet connections (only servers)
    3. Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name  
    4. tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      694/cupsd          
    5. tcp        0      0 127.0.0.1:9050          0.0.0.0:*               LISTEN      697/tor            
    6. tcp6       0      0 :::515                  :::*                    LISTEN      1/init            
    7. tcp6       0      0 ::1:631                 :::*                    LISTEN      694/cupsd          
    8. udp        0      0 0.0.0.0:68              0.0.0.0:*                           651/dhcpcd: [master
    9. udp        0      0 0.0.0.0:631             0.0.0.0:*                           707/cups-browsed  
    10. udp        0      0 0.0.0.0:5353            0.0.0.0:*                           605/avahi-daemon: r
    11. udp        0      0 0.0.0.0:38179           0.0.0.0:*                           605/avahi-daemon: r
    12. udp6       0      0 :::5353                 :::*                                605/avahi-daemon: r
    13. udp6       0      0 :::56818                :::*                                605/avahi-daemon: r
    14. $
    15.  
    --- Сообщение объединено, 6 апр 2020 ---
    Я понял:
    Я запускал $ qemu-system-x86_64 -s -S -nographic -hdd Desktop/os/picos/bin/os &, а потом в этом же терменали gdb
    Теперь я в 1-ом терменале запустил $ qemu-system-x86_64 -s -S -nographic -hdd Desktop/os/picos/bin/os
    А во втором (gdb) target remote localhost:1234
    И gdb сказал:
    Код (Text):
    1. Remote debugging using localhost:1234
    2. warning: No executable has been specified and target does not support
    3. determining executable automatically.  Try using the "file" command.
    4. 0x000000000000fff0 in ?? ()
    5.  
    --- Сообщение объединено, 6 апр 2020 ---
    Спасибо, TermoSINteZ !
    --- Сообщение объединено, 6 апр 2020 ---
    Только теперь qemu вообще не отображает текст выведенный загрузчиком и ядром (может быть из-за того, что он цветной)
    --- Сообщение объединено, 6 апр 2020 ---
    Кажется я понял: по какой-то причине qemu сбрасывается каждый раз(сделал такой вывод из адреса, он доходит до определенного момента, а потом обнуляется). Видимо, в каком-то месте процессор уходит в функцию перезагрузки (?reboot). Сейчас ее и работу с APM закоментирую.
    --- Сообщение объединено, 6 апр 2020 ---
    Закоментировал все что связано с питаниеми функцию перехода в реальный режим (?gorealmode), но проблема та же.
    У меня есть новой предположение: моя кривая функция вывода строк на экран (?print). Вот ее код:
    Код (Text):
    1. ?print:
    2. push ax
    3. push dx
    4. mov eax,ecx
    5. mov ecx,2
    6. mul ecx
    7. mov ecx,eax
    8.  
    9. mov eax,0
    10. pop dx
    11. mov edi,0b8000h
    12. mov al,2
    13. mul dl
    14. add edi,eax
    15.  
    16. mov eax,0
    17. mov al,0a0h
    18. mul dh
    19. add edi,eax
    20.  
    21. pop ax
    22. mov ah,al
    23.  
    24. @print:
    25. lodsb
    26. stosb
    27. mov al,ah
    28. stosb
    29. cmp ecx,0
    30. jz @ret
    31. dec ecx
    32. loop @print
    33.  
    34. @ret:
    35. ret
    36.  
    --- Сообщение объединено, 6 апр 2020 ---
    Проверил, это не она
    --- Сообщение объединено, 6 апр 2020 ---
    Странно. Теперь я думаю, что дело в эмуляторе.
    --- Сообщение объединено, 6 апр 2020 ---
    Как мне запустить бинарник в VirtualBox?
     
  18. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    до какого места он доходит? В какой функции у вас идет ресет?
    Маловероятно.
     
    UbIvItS нравится это.
  19. TolyProg

    TolyProg New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2020
    Сообщения:
    16
    Не знаю как пользоваться gdb
    --- Сообщение объединено, 6 апр 2020 ---
    Как поставить пошаговое выполнение?
     
  20. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    display/i $pc
    выведет список инструкций
    stepi
    даст команду перейти на следующую инструкцию