Board.KolibriOS.org

Official KolibriOS board
It is currently Fri Aug 23, 2019 6:58 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 126 posts ]  Go to page 1 2 3 4 59 Next
Author Message
PostPosted: Tue Oct 09, 2007 11:43 am 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 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. Может быть, кто-то один захочет взяться за написание эмулятора целиком. Может быть, вы (линуксоиды) решите разделить работу. (системных функций в Колибри много...) Может быть, никто не захочет ничего делать. Пожалуйста (мне-то что?). Для координации действий предлагаю использовать эту тему.

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


Top
   
PostPosted: Wed Oct 24, 2007 12:32 pm 
Offline
Kernel Developer
User avatar

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


Top
   
PostPosted: Wed Oct 24, 2007 2:14 pm 
Offline

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

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


Top
   
PostPosted: Sat May 02, 2009 5:32 pm 
Offline
Kernel Developer
User avatar

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


Attachments:
kolibrinix.zip [6.22 KiB]
Downloaded 264 times
Top
   
PostPosted: Sun May 03, 2009 9:41 pm 
Offline

Joined: Wed Jan 04, 2006 12:25 pm
Posts: 59
Супер, буду ждать с нетерпением!


Top
   
PostPosted: Mon May 04, 2009 12:41 am 
Offline
Site Founder
User avatar

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

_________________
in code we trust


Top
   
PostPosted: Tue Mar 27, 2018 11:28 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
К 10-ти летию моей регистрации на форуме :)

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

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


Top
   
PostPosted: Tue Mar 27, 2018 11:34 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 253
tsdima wrote:
К 10-ти летию моей регистрации на форуме :)

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

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

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


Top
   
PostPosted: Fri Mar 30, 2018 4:01 am 
Offline
User avatar

Joined: Thu May 18, 2017 2:29 am
Posts: 170
tsdima wrote:
К 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:


Top
   
PostPosted: Fri Mar 30, 2018 12:21 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5054
> 3. В EOLITE почему-то неправильно отображаются иконки.
Можешь скрин кинуть?

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


Top
   
PostPosted: Fri Mar 30, 2018 12:36 pm 
Offline

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


Top
   
PostPosted: Sat Mar 31, 2018 4:27 pm 
Offline
User avatar

Joined: Thu May 18, 2017 2:29 am
Posts: 170
Leency wrote:
Можешь скрин кинуть?
tsdima wrote:
Про EOLITE - действительно, нужен скрин.
Немножко неточно выразился. Я имел ввиду, что отображаются не те иконки файлов и папок, которые должны быть.
Вот собственно скрин:

Image

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

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

Image

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

Image

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

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

Image

_________________
The Glass is Always Half Full! :mrgreen:


Top
   
PostPosted: Sat Mar 31, 2018 5:59 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
JohnXenox wrote:
Видимо, всё дело в чувствительности к регистру.

Да, забыл сказать, есть такая проблема. Однако если не копировать файлы из образа, а прямо смонтировать его в ~/.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 можно, но что будет на практике - пока не знаю.


Top
   
PostPosted: Sat Mar 31, 2018 6:00 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
По поводу растягивания окон, хотелось бы узнать версию Линукса и тип оконного менеджера.


Top
   
PostPosted: Sun Apr 01, 2018 11:10 am 
Offline

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 126 posts ]  Go to page 1 2 3 4 59 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited