|
|
|
BSDyashnik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 12.12.2009 Репутация: нет Всего: нет |
хочу изучить ядро FreeBSD. читаю http://www.freebsd.org.ua/doc/ru_RU.KOI8-R...book/index.html
очень многие вещи непонятны: 1) есть ли какие-то строго определенные правила загрузки ядра на x86(если есть, какую литературу почитать) 2) одинакова ли загрузка для разных ОС (понятно, что ядра разные, я имею ввиду сам процесс и сам код загрузки) 3) одинакова ли для разных ОС MBR 4) как я понимаю, для фряхи используется синтаксис AT&T, а каким компилятором компилировать - не знаю 5) что нужно почитать и понять работу процессора для x86(понятно сама суть, что надо загрузить ядро), но непонятно как? 6) если я буду писать свой загрузчик для простенькой программки - не спалю ли я чего? т.е. насколько безопасно 7) очень охота научиться и разобраться с системой с самого начала (пока до ядра), посоветуйте пожалуйста как и с чего начать (на Си писал много, на ассемблере - не писал) 8) будут возникать еще вопросы - прошу тему не закрывать всем спасибо за внимание |
|||
|
||||
Logree |
|
|||
Опытный Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: нет Всего: 2 |
1. Нет(если не считать за правилос грузить его c PL 0)
2. Как хочешь так и пиши, стандартная схема - первичный загрузчик, вторичный, ядро. 3. Смотря что ты подразумиваешь под MBR см тут. 4. Gas 5. Intel® 64 and IA-32 Architectures Software Developer's Manual wasm.ru 6. Нет. Маловероятно 7. Начинай учить ASM без него ни куда. Это сообщение отредактировал(а) Logree - 12.12.2009, 18:48 -------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
|||
|
||||
BSDyashnik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 12.12.2009 Репутация: нет Всего: нет |
Logree, благодарю за ответ.
что такое PL 0 ? несовсем понятно, какой asm учить? учить по мануалам с интеловского сайта? а писать только в синтаксесе для gas. отличается ли gas для фряхи и линукса? т.е. принципиально для всех ОС работает одна схема загрузки - первичный загрузчик, вторичный, ядро тогда получается, что отличается только реализация!? но почему же тогда не используется один код загрузки для всех ОС? если кто читал интеловские мануалы, скажите, той инфы, которая в них есть, достаточна для изучения загрузки ОС или же надо еще что знать из архитектуры именно на программном уровне? Это сообщение отредактировал(а) BSDyashnik - 12.12.2009, 19:06 |
|||
|
||||
Logree |
|
||||
Опытный Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: нет Всего: 2 |
Синтаксис значения не имеет лично мне нравиться fasmовский(это немного измененый интеловский), вообще все известные мне книжки по асм используют intel синтаксис так что лучшебы начать с него.
Privilegen Level 0 - смотри мануал.
Я просто привёл пример - схема может быть другой, для меня странно что человек "много писавший на C" задаёт такой вопрос.
Мануалы Intel не описывают способы реализации ОС, они описывают архитектуру процессора(хотя рекомендации и примеры кода присутствуют), про загрузку компьютера олезно почитать Bios Boot Specification. PS Ищи сайты по OS Dev'у. Это сообщение отредактировал(а) Logree - 12.12.2009, 21:13 -------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
||||
|
|||||
BSDyashnik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 12.12.2009 Репутация: нет Всего: нет |
Logree, спасибо за исчерпывающий ответ, пойду изучать.
p.s. по поводу что много писал, так я ж системным программированием не занимался - другое писал уточнить хотел - что такое OS Dev'у? это http://wiki.osdev.org/Main_Page ? Это сообщение отредактировал(а) BSDyashnik - 13.12.2009, 01:20 |
|||
|
||||
Logree |
|
|||
Опытный Профиль Группа: Участник Сообщений: 331 Регистрация: 22.11.2006 Где: Самара Репутация: нет Всего: 2 |
Я имел в виду любые сайты про разработку операцыонных систем
-------------------- Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд. |
|||
|
||||
BSDyashnik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 12.12.2009 Репутация: нет Всего: нет |
взялся за асм, прочитал кучу статей и пришел к выводу, что все вставки в исходный код и отдельные модули (linux & freeBSD) используют синтаксис AT&T, но многие советуют начинать именно с компилятора nasm, потом переходить на as, наверное так и сделаю
|
|||
|
||||
500mhz |
|
|||
шайтан Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
BSDyashnik
не забивайте себе голову мертвым компилятором (nasm), fasm перспективней и постоянно развиваеться никто не мешает компилить фасмом obj и линковать gccсшным линкером или как альтернатива http://www.openwatcom.org/index.php/Download там интеловский синтаксис в инлайн асме -------------------- |
|||
|
||||
BSDyashnik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 12.12.2009 Репутация: нет Всего: нет |
500mhz, спасибо, с выбором все еще не определился(хотя установил и попробовал все)
суть заключается в том, что под никсами используется синтаксис AT&T, вот, и скорее всего только as годиться, хотя практически нигде в литературе он не используется |
|||
|
||||
BSDyashnik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 12.12.2009 Репутация: нет Всего: нет |
у меня вот проблема с пониманием некоторых вещей:
например, возьмем реальный режим. 1) пусть сегментные регистры 16 разрядные(пока не дошел до 32 разрядных), тогда адресное пространство от 0 до 65535. физический адрес, который вычисляет процессор равен сегментный адрес*16 + смещение вот, вопрос в том, что тут же перекрываются адреса, т.е. если сегментный адрес и смещение в пределах от 0000 до FFFF, например: 13E5h x 10h + 17h = 13E50h + 17h = 13E67h и 13E6h x 10h + 07h = 13E60h x 07h = 13E67h так получается, что сегментный адрес имеет не весь диапозон от 0000 до FFFF собственно, как это понять? или может я что недопонимаю? 2) когда запускается программа, у нее есть как минимум три сегмента (cs, ds, ss) не понимаю, каким образом в них записываются адреса соответствующих сегментов и как они разбросаны в оперативной памяти? предполагаю, что это делает каким то образом операционка, ну а если просто эта программа загружается во время загрузки(типа как загрузчик), кто ж тогда нахначает адреса этих сегментов? всю жизнь считал, что исполняемый код представляет некую так сказать абстракцию, и весь это код последовательно загружается в оперативную память и последовательно выполняется(т.е. получается, что код загрузился по какому то адресу, а в сегментные регистры записываются адреса из этого загруженного кода соответствующие адреса сегментов) ребята, помогите понять что и как, запутался совсем |
|||
|
||||
500mhz |
|
|||
шайтан Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
1) все не помню по поводу сегментов давно это было,в реал моде сегмент принятно считать 64 кб, ну не суть важно, короче по вопросу, в режиме 8086 если сделаю seg:0xFFFF + offset:0xFFFF то следуя формуле
2) тут дело в типе файлов, СОМ - это просто кусок кода (бинарник) размером не более 64 кб без всяких заголовков который ложиться в память с адреса 0х100, у него CS=DS=SS и так далее, естественно значения ставяться операционкой. У ЕХЕ есть заголовок в котором описано из чего он состоит где что лежит и какие значения дать сегментам. Типа так ====Заголовок ЕХЕ===== ====Секция кода====== ====Секция данных==== никто не запрещает в ехе слепить все в 1 секцию и присвоить сегментам одинаковый адрес все равно будет работать -------------------- |
|||
|
||||
BSDyashnik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 12.12.2009 Репутация: нет Всего: нет |
500mhz, спасибо за ответ, все равно не понял
вчера прочитал, что действительно, в реал-моде адреса перекрываются |
|||
|
||||
500mhz |
|
|||
шайтан Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
ну так что не понял то?
(seg:0xFFFF * 16) + offset:0xFFFF = 0х16FFE9 а на самом деле будет 0хFFE9 так как шина у тебя 16 бит , а вот если включена А20 тогда адрес так и останется 0х16FFE9 потому что с А20 шина имеет 20 бит -------------------- |
|||
|
||||
BSDyashnik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 12.12.2009 Репутация: нет Всего: нет |
(seg:0xFFFF * 16) + offset:0xFFFF = 0х16FFE9 а как это так получилось?
если 0xFFFF * 16 = 0xFFFF0 0xFFFF0 + 0xFFFF = 10FFEF |
|||
|
||||
500mhz |
|
|||
шайтан Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
BSDyashnik
сорри ошибся, но суть та же ) -------------------- |
|||
|
||||
Правила форума "Asm для Linux/Unix" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для Linux/Unix | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |