185 похожих чатов

Господа, приветствую. Окунаюсь в глубины osdev, пишу пока загрузчик x86

по мануалам.
Всё более-менее понятно, но затык в переключении на код ядра после перехода в long mode.
В этом чате уместно будет уточнить некоторые аспекты этого процесса?

2 ответов

17 просмотров

Уместно, но с другой стороны зачем тебе загрузчик, пиши сразу ядро.

Fedor- Автор вопроса
ᛒ ᛖ ᚱ ᚲ ᚢ ᛊ ᛞ ᛖ ᚲ ᛖ ᚱ
Уместно, но с другой стороны зачем тебе загрузчик,...

Хотелось досконально разобраться в работе процессора с момента запуска загрузчика. В ядре возникли проблемы именно с управлением памятью (реализация malloc/free для поддержки c++), так что решил копать с самого начала. Вероятно, разобравшись с загрузчиком, я его выброшу :) Насколько я понял, при переходе в long mode у нас в распоряжении пачка предопределенных сементов, в частности 0x08 и 0x10. Эти сегменты "смотрят" на страницы виртуальной памяти, которая "смотрит".. да, куда угодно в физической памяти смотрит? Мой boot0 подгружает с диска остальные секторы, это вроде стандартно для legacy. Когда ассемблерный код доходит до перехода к x64 (код на с), он делает jump CODE_SEG:c_main. Бинарник собирался так, чтобы c_main оказался по смещению 0x8000, так что по факту происходит jump 0x8:0x8000. И тут самое интересное, потому что мой код вызывается, дебажится (qemu+gdb) и вообще всё работает как хотелось. Но разве должно? Я имею в виду, что происходит переход в новое адресное пространство, а нём (по-моему) должно быть пусто, ну или там хлам какой-нибудь. И мне, по идее, надо было бы сперва загрузить туда код моего ядра, начиная со смещения 0, и прыгать в этот 0, а не в 8000, но почему-то работает без этого. Единственная мысль, что виртуальная память сегмента замаплена 1:1 на физическую память, но тогда зачем все эти танцы? Вот и хотел тут спросить, как в "чужом" сегменте появился мой код? А там ещё есть сегмент данных, что в нём пока не ясно, но до него тоже доберусь :)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта