Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Ср дек 19, 2018 1:35 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 126 сообщений ]  На страницу 1 2 3 4 59 След.
Автор Сообщение
 Заголовок сообщения: Эмулятор под Linux
СообщениеДобавлено: Вт окт 09, 2007 11:43 am 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пн ноя 28, 2005 8:00 pm
Сообщения: 1601
Я - виндоузятник. В качестве такового я написал известный, думаю, абсолютному большинству участников этого форума эмулятор KlbrInWin (который, кстати, считаю своей лучшей программой). С Linux'ом я связываюсь только если я вынужден это сделать либо мне за это платят. Так что чего-нибудь похожего под Linux я писать не собираюсь.
Тем не менее я признаю право на существование линуксоидов. На этом форуме таковые, насколько я знаю, есть. Кроме того, я считаю себя крутым системным программистом (не без оснований). Какое-то время назад я придумал (основываясь на знаниях, полученных в общем-то случайно) метод эмуляции Колибри-бинарников под Linux (в смысле, решение двух основных проблем: загрузки бинарника по нулевому адресу и перехвата int 0x40, причём без полной эмуляции процессора, требующей дополнительно кучи усилий по кодированию и тормозящей). Поскольку сам я этим пользоваться не собираюсь, то потратил некоторое количество времени на написание работающего примера (писал, естественно, под виндой) и комментариев к коду (предупреждение: комментарии у меня по жизни получаются плохо, но я старался) и теперь предлагаю любому, кто захочет, изучить этот пример и заняться на его базе разработкой.

1. Запуск с нулевого адреса. Идея в том, что "настоящий" адрес программы ненулевой, но можно исполнять программу с не-плоскими cs,ds,es,ss: создать дескриптор в LDT с базой, равной "настоящему" адресу, по которому загружена Колибри-программа, и лимитом, равным размеру памяти, требуемой Колибри-программе. LDT можно модифицировать системным вызовом sys_modify_ldt, для которого в libc есть обёртка modify_ldt. Фактически требуются два дескриптора: для кода и для данных. Передача управления делается ассемблерной вставкой.
2. Перехват int 0x40. В Linux int 0x40 означает исключение #GP, которое Linux обрабатывает как сигнал SIGSEGV. Можно установить свой обработчик сигнала через sys_sigaction - аналог в libc называется sigaction. Только при этом нужно во флагах структуры sigaction установить флаг SS_ONSTACK и определить через sys_sigaltstack - обёртка в libc именуется sigaltstack, можно также sigstack - стек, на который будет переключение при вызове обработчика, конкретно область памяти размера минимум 2 Кб (рекомендуется, скажем, 32 Кб), которая станет стеком обработчика.

http://diamondz.land.ru/linuxemuldemo.7z
Примечания:
1. Поскольку на моём компе Linux существует только в виде мини-образа под Bochs и исходников ядра, то Си-компилятора, способного генерировать ELF, у меня нет, равно как и заголовочных файлов. Так что пример написан на FASM'е и системных вызовах. Надеюсь, впрочем, что основные идеи оттуда всё же можно понять.
2. Пример для простоты не мучается с загрузкой Колибри-бинарника и файлов вообще, а эмулируемый код включается как файл. Он начинается с сигнатуры "MENUET01", а точкой входа считается смещение 8 (сразу после сигнатуры).
3. Я тестировал этот код в вышеупомянутом мини-образе, а также на двух различных реальных Linux-системах (причём ни в одной их этих систем прав root'а у меня не было совсем), одной древней и одной относительно новой. Работало.

Организационные замечания:
1. В теме про KlbrInWin довольно давно O01eg заявил, что написал бы эмулятор при условии решения двух вышеупомянутых проблем. Когда я придумал вышеупомянутый способ, я сообщил об этом O01eg'у (было это пару месяцев назад). В ответном сообщении было сказано, что он от своих слов не отказывается, но Linux временно не работает из-за проблем с железом. Так что, возможно, эмулятор уже пишется, а я тут своим постом весь сюрприз сбиваю. В таком случае прошу прощения и обращаю внимание форума на приоритет O01eg'а.
2. Когда меня на этом форуме ещё не было, а MeOSEmul (Windows-эмулятор, решающий вышеупомянутые проблемы эмуляцией процессора) был ещё жив, в соответствующей теме был вопрос о портировании под Linux, тем более что эмуляция процессора системно-независима. Тогда за это никто не взялся. С того времени прошло несколько лет, на форуме появилось много народу (в том числе добавилось несколько активных людей), а некоторые, возможно, изменили своё отношение к этой оси и уж точно изменили приоритеты задач. Возможно, в этот раз ситуация всё-таки изменится к лучшему?
3. Может быть, кто-то один захочет взяться за написание эмулятора целиком. Может быть, вы (линуксоиды) решите разделить работу. (системных функций в Колибри много...) Может быть, никто не захочет ничего делать. Пожалуйста (мне-то что?). Для координации действий предлагаю использовать эту тему.

_________________
Ушёл к умным, знающим и культурным людям.


Вернуться к началу
 Заголовок сообщения: Re: Эмулятор под Linux
СообщениеДобавлено: Ср окт 24, 2007 12:32 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пн ноя 28, 2005 8:00 pm
Сообщения: 1601
Видимо, ситуация всё же не изменилась. Приношу извинения за беспокойство.


Вернуться к началу
 Заголовок сообщения: Re: Эмулятор под Linux
СообщениеДобавлено: Ср окт 24, 2007 2:14 pm 
Не в сети

Зарегистрирован: Ср фев 21, 2007 3:03 pm
Сообщения: 188
Я бы взялся но:
1) по твоим словам я понял что мои познания в области запуска приложений (LDT и остальное) не то что малы, я б даже сказал нулевые, т.к. ничего не понял... да, может быть если подрасчехлится, я бы все понял, т.к. схватываю быстро
2) на данный момент мне больше интересна дисковая система. Да может это будет бесполезно для колибри, но душа туда тянется, я думаю меня многие поймут!

Единственное что могу предложить это реализацию некоторых функций. В свое время разбирался с иксами, правда это было давно, но если один раз разобрался, то ничего не стоит вспомнить!
Ну и ктому же не понятно на какой стадии сейчас O01eg


Вернуться к началу
 Заголовок сообщения: Re: Эмулятор под Linux
СообщениеДобавлено: Сб май 02, 2009 5:32 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пн мар 20, 2006 10:44 am
Сообщения: 557
UP ))
В приложении этот же эмулятор на C + заготовка для X`ов. Есть желание - берите и делайте, у меня пока нет на это времени.
Все нормально компилялось и работало под Fedora 8 и Ubuntu 8.04


Вложения:
kolibrinix.zip [6.22 КБ]
209 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: Эмулятор под Linux
СообщениеДобавлено: Вс май 03, 2009 9:41 pm 
Не в сети

Зарегистрирован: Ср янв 04, 2006 12:25 pm
Сообщения: 59
Супер, буду ждать с нетерпением!


Вернуться к началу
 Заголовок сообщения: Re: Эмулятор под Linux
СообщениеДобавлено: Пн май 04, 2009 12:41 am 
Не в сети
Site Founder
Аватара пользователя

Зарегистрирован: Вс авг 08, 2004 8:55 am
Сообщения: 689
У меня шота есть на фасме, даже работаед kerpack (ну там три функции используюццо). Плюс есть функции типа получения координат курсора. В последнее время тут работу менял и всё такое, не было времени. Посмотрим, может что и выложу.

_________________
in code we trust


Вернуться к началу
 Заголовок сообщения: Re: Эмулятор под Linux
СообщениеДобавлено: Вт мар 27, 2018 11:28 pm 
Не в сети

Зарегистрирован: Ср мар 26, 2008 12:44 pm
Сообщения: 222
К 10-ти летию моей регистрации на форуме :)

Не прошло и три года (прошло десять лет). Наконец-то решился выложить результаты на GitHub. Разрабатывалось под Убунтой. Пока только для x64, собирать для x32 не пробовал (будут 100% ошибки).

Хотелось бы узнать, кому будет интересен этот проект, сколько человек пользуется линуксом.


Вернуться к началу
 Заголовок сообщения: Re: Эмулятор под Linux
СообщениеДобавлено: Вт мар 27, 2018 11:34 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 252
tsdima писал(а):
К 10-ти летию моей регистрации на форуме :)

Не прошло и три года (прошло десять лет). Наконец-то решился выложить результаты на GitHub. Разрабатывалось под Убунтой. Пока только для x64, собирать для x32 не пробовал (будут 100% ошибки).

Хотелось бы узнать, кому будет интересен этот проект, сколько человек пользуется линуксом.

годно, давайте еще и под Андроид) Arm жаль :(


Вернуться к началу
 Заголовок сообщения: Re: Эмулятор под Linux
СообщениеДобавлено: Пт мар 30, 2018 4:01 am 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 18, 2017 2:29 am
Сообщения: 170
tsdima писал(а):
К 10-ти летию моей регистрации на форуме :)

Не прошло и три года (прошло десять лет). Наконец-то решился выложить результаты на GitHub. Разрабатывалось под Убунтой. Пока только для x64, собирать для x32 не пробовал (будут 100% ошибки).

Хотелось бы узнать, кому будет интересен этот проект, сколько человек пользуется линуксом.
Опаньки. Круто. :D

Немного потестировал, и вот, что выяснил:
1. CROWNSCR и WEB отображаются не в том разрешении, которое должно быть. Видимо неправильно работает определение разрешения экрана.
2. ACLOCK при запуске улетает за пределы экрана, но не полностью (правый угол). Скорее всего по той же причине, что и пункт 1.
3. В EOLITE почему-то неправильно отображаются иконки.
4. CIRCLE почему-то квадратный.
5. Не работает растягивание и максимизация окон.

Возможно что-то упустил, но, в освном, программы работают замечательно.

P.S. На гитхабе написано "If you have installed CodeLite simply open project file and build it."
Хотел так сделать. Поставил Codelite 12.0, но не вышло. У меня Codelite не открывает файл проекта.
Пришлось в терминале компилировать.

_________________
The Glass is Always Half Full! :mrgreen:


Вернуться к началу
 Заголовок сообщения: Re: Эмулятор под Linux
СообщениеДобавлено: Пт мар 30, 2018 12:21 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4879
> 3. В EOLITE почему-то неправильно отображаются иконки.
Можешь скрин кинуть?

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: Эмулятор под Linux
СообщениеДобавлено: Пт мар 30, 2018 12:36 pm 
Не в сети

Зарегистрирован: Ср мар 26, 2008 12:44 pm
Сообщения: 222
По поводу разрешения экрана - у меня несколько дисплеев, соответственно разрешение нереальное, для отладки поставил 1920х1080 и благополучно забыл об этом. Исправлю.
Про EOLITE - действительно, нужен скрин.
CIRCLE - нет функционала прозрачных окон, пока так и должно быть. Если в терминале выскакивают сообщения про mcall, то это вызов нереализованной функции.
По 5-тому пункту - не понял, поясни. У меня работает. Не все окна разрешают растягивание.
Codelite 12 надо будет попробовать, у меня старая 9-тая версия. Скорее всего несовместимый формат. Видимо проект придётся убрать.


Вернуться к началу
 Заголовок сообщения: Re: Эмулятор под Linux
СообщениеДобавлено: Сб мар 31, 2018 4:27 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 18, 2017 2:29 am
Сообщения: 170
Leency писал(а):
Можешь скрин кинуть?
tsdima писал(а):
Про EOLITE - действительно, нужен скрин.
Немножко неточно выразился. Я имел ввиду, что отображаются не те иконки файлов и папок, которые должны быть.
Вот собственно скрин:

Изображение

tsdima писал(а):
По поводу разрешения экрана - у меня несколько дисплеев, соответственно разрешение нереальное, для отладки поставил 1920х1080 и благополучно забыл об этом. Исправлю.
Было бы неплохо.
tsdima писал(а):
CIRCLE - нет функционала прозрачных окон, пока так и должно быть.
Если в терминале выскакивают сообщения про mcall, то это вызов нереализованной функции.
Codelite 12 надо будет попробовать, у меня старая 9-тая версия. Скорее всего несовместимый формат. Видимо проект придётся убрать.
Ясно.
tsdima писал(а):
По 5-тому пункту - не понял, поясни. У меня работает. Не все окна разрешают растягивание.
Ну например, не максимизируются и не растягиваются окна: tinypad, t_edit, eolite, kfm, kfar, heed и т.д.
Даже пробовал пример EXAMPLE.ASM, предворительно модифицировав mov edx, 0x14ffffff на mov edx, 0x13ffffff.

FNAV покзывает кракозябры.

Изображение

GAME_CENTER не полностью показывается.

Изображение

FB2READ не запускается. Пишет, что не найден RasterWorks.obj, но он есть, я проверял. Видимо, всё дело в чувствительности к регистру. Потому, что уменя RASTERWORKS.OBJ в вверхнем регистре.

UNZ тоже не запускается.

Изображение

_________________
The Glass is Always Half Full! :mrgreen:


Вернуться к началу
 Заголовок сообщения: Re: Эмулятор под Linux
СообщениеДобавлено: Сб мар 31, 2018 5:59 pm 
Не в сети

Зарегистрирован: Ср мар 26, 2008 12:44 pm
Сообщения: 222
JohnXenox писал(а):
Видимо, всё дело в чувствительности к регистру.

Да, забыл сказать, есть такая проблема. Однако если не копировать файлы из образа, а прямо смонтировать его в ~/.kex/root/RD/1, то этой проблемы не заметно (я кстати не знал, что если смонтировать образ c FAT, то обращение к файлам станет регистронезависимым). Я открываю образы "Disk Image Mounter"-ом, они монтируются в /media, а в каталоге ~/.kex/root/RD/ я сделал линк на каталог в /media (1 -> /media/user/KOLIBRI). Образы монтируются только для чтения, но это вроде не проблема, можно создать каталог /RD/2 и там файлы сохранять.

Проблема с иконками и game center скорее всего тоже из-за чувствительности к регистру.

На данный момент короткие имена приводятся к верхнему регистру, а длинные, типа RasterWorks.obj оставляю как есть. Но по-хорошему, надо бы считывать каталог и искать имя без учёта регистра и потом использовать то, что найдено. Только мне кажется, это будет замедлять работу.

С fNav да, какая-то непонятная хрень, вроде бы используются только реализованные функции, и вроде бы я их полностью реализовал. Но не работает. Жаль исходников fNav нет.

Не работают программы, которые используют fs: (в основном Си-шные) и gs: (три игрушки от codemaster-а). Пока не знаю, решаемо ли. Использовать rdfsbase/wrfsbase можно, но что будет на практике - пока не знаю.


Вернуться к началу
 Заголовок сообщения: Re: Эмулятор под Linux
СообщениеДобавлено: Сб мар 31, 2018 6:00 pm 
Не в сети

Зарегистрирован: Ср мар 26, 2008 12:44 pm
Сообщения: 222
По поводу растягивания окон, хотелось бы узнать версию Линукса и тип оконного менеджера.


Вернуться к началу
 Заголовок сообщения: Re: Эмулятор под Linux
СообщениеДобавлено: Вс апр 01, 2018 11:10 am 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1499
tsdima, ну вообще fNav запускается из-под KlbrInWin(только мышкой не води по нему :) )
Можно сравнить как сделано в KlbrInWin.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 126 сообщений ]  На страницу 1 2 3 4 59 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB