Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Nov 13, 2019 7:53 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 300 posts ]  Go to page Previous 110 11 12 13 1420 Next
Author Message
PostPosted: Tue Jun 15, 2010 8:48 pm 
Offline
User avatar

Joined: Wed Jan 27, 2010 10:59 am
Posts: 269
Понятно. Какая-то финская традиция :D

_________________
ушёл...


Top
   
PostPosted: Wed Jun 16, 2010 6:43 pm 
Offline
Just Flooding
User avatar

Joined: Wed May 18, 2005 10:27 am
Posts: 430
Nasarus wrote:
А зачем, собственно, нужно было переключение регистров?

хороший вопрос пытливого человека! Поздравляю!
Nasarus wrote:
Понятно. Какая-то финская традиция :D

Ну наверное не совсем так. Вернее будет совсем не так если покумекать. Ну давай типа я тебе свое кумеканье изложу, думаю, будет полезно.
Смотри.
Разработчик, особенно ядра и всяких ядрёных и около ядрёных фенечек, может столкнуться, а вернее сказать, постоянно сталкивается
с проблемами в области "сердца системы". Следовательно нужно иметь инфу, чтобы разобраться, где да что. Дебаггер(ы), логи, дампы непременные спутники этого трудного пути разбирательств. Естественно, чем лучше и качественнее инфа, да еще если так сказать "на заказ" :wink: да внужном месте (в интересующем API стыке например) то эти сладости понятны. А вот если нет ничего? Если только, только возводится ядро или зона глюков приблизительна? Тогда хоть какой то программерский финт, уловка, ухищрение, могут сослужить незаменимую службу. А если он(а) этот финт оправдал несколько раз задумку автора, то, пожалуй она может остаться надолго и в ядре, скажем. Особенно если он(а) "карман не тянет", а работы впереди еще и края не намечается. И еще.
Автор, выкладывая исходники, пусть даже открытого проекта, может (ИМЕЕТ ПОЛНОЕ ПРАВО) НЕ ВЫКЛАДЫВАТЬ СВОИ ОТЛАДОЧНЫЕ технологии, модули, объекты, вспомогательные проги, среды... да что там говорить, комментарии!
Ведь это его мысли вслух! Порой, разгадка даже самому себе (через год-два) хода мысли дальше, зачем именно тут и так вот и так накодил тут именно, что хотел дочтичь, чего искал собственно(баг).....
Так вот, если это для него есть ценная инфа, а порой оно и бывает или это может подсказать конкурентам решение проблемы (ипр. и т.п.),
то....
комменты ЧИСТЯТСЯ,
т.е. удаляются либо совсем (возьми сорцы FASM полистай и подумай о стиле и табуляциях текста, например....) либо частично.
Сделать это сам понимаешь, как :D 2 байта.... обнулить. :lol:
Пишется прожка (парсер это слишком громко :) ), которая ищет символ ";" и удаляет весь остаток строки до 0Dh, 0Ah в листинге
любых сорцов типа asm в данном случае.
Как на автора бочку не гони, но он завсегда прав получается и перед законом и перед людьми, ибо он АВТОР. Это всегда НАДО иметь ввиду, полезно.
НУ теперь код смотрим
Code:
cross_order:
        ; load all registers in crossed order
        mov     eax, ebx
        mov     ebx, ecx
        mov     ecx, edx
        mov     edx, esi
        mov     esi, edi
        movzx   edi, byte[esp+28 + 4]
        call    dword [servetable+edi*4]
        ret

что видим? Ротацию видим. Что она дает кодеру если скажем мы имеем возможность мониторить(пусть просто смотреть вызовы) регистры
в некоторой точке памяти [servetable+edi*4]?
Кое что нужное да имеем! Можем с этого поиметь.
Ву вот залетаем мы сюда часто несанкционированно типа, циклимся непонятно откуда пусть и допустим именно на метку cross_order:
Тогда мониторинг покажет ротацию, сдвиг. Как это выглядит?
ПУсть был EAX = 0x66. Тогда логично, что в [servetable+edi*4] мы имеем EBX = 0x66 и это верно.
А если затем, сразу, "видим" еще вызов и еще и еще.... и уже ESI = 0x66......???
вот тебе простенькая типа фенечка. Глупо? Быть может и так, только, как именно думал автор и почему именно так, где то в 2003 году мы сейчас вряд ли узнаем...
Но уметь читать между строк всегда полезно, я так думаю. :wink:


Top
   
PostPosted: Wed Jun 16, 2010 7:00 pm 
Offline
User avatar

Joined: Wed Jan 27, 2010 10:59 am
Posts: 269
Теперь немного понял :) Спасибо за такой развернутое объяснение)

_________________
ушёл...


Top
   
PostPosted: Wed Jun 16, 2010 7:06 pm 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Данное решение не сильно тормозит систему(регистровый сдвиг), однако занимает некоторое место. Было принято решение о прямом вызове сис. функций без регистрового сдвига. Сейчас осталось всего 4 сис. функции, которые используют это соглашение при вызове. Это 53, 58, 62, 63 сис.функции. Скоро система полностью избавиться от регистрового сдвига.


Top
   
PostPosted: Wed Jun 16, 2010 9:42 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Fri Jun 30, 2006 9:01 am
Posts: 1248
<Lrz> wrote:
Данное решение не сильно тормозит систему(регистровый сдвиг), однако занимает некоторое место. Было принято решение о прямом вызове сис. функций без регистрового сдвига. Сейчас осталось всего 4 сис. функции, которые используют это соглашение при вызове. Это 53, 58, 62, 63 сис.функции. Скоро система полностью избавиться от регистрового сдвига.


When Net branch will be merged in kernel, system function 53 will be deleted.

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Top
   
PostPosted: Thu Jun 17, 2010 1:59 am 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
VaStaNi wrote:
Тогда мониторинг покажет ротацию, сдвиг. Как это выглядит?
ПУсть был EAX = 0x66. Тогда логично, что в [servetable+edi*4] мы имеем EBX = 0x66 и это верно.
А если затем, сразу, "видим" еще вызов и еще и еще.... и уже ESI = 0x66......???

Собственно, степень соответствия размышлений реальности видна уже по тому, что в реальности ротация идёт в другом направлении - новое значение eax берётся из старого значения ebx.
VaStaNi wrote:
Ву вот залетаем мы сюда часто несанкционированно типа, циклимся непонятно откуда пусть и допустим именно на метку cross_order:

Угу. А заодно допустим, что при этом так грамотно рушится стек, что значение ESP оказывается таким же, каким было до "залетания", чтобы объяснить, почему следить за ESP недостаточно. Случайно всё так совпало, угу. И исключительно под этот случай подстраиваемся, бывает же. А ещё, разумеется, при этом мы совершенно игнорируем тот факт, что в первых версиях ядра всё было не так. Не было никакой метки cross_order, а случайное повторное попадание на метку i40 приводило не к повторной ротации регистров, а к повторной их загрузке в том же самом порядке.
VaStaNi wrote:
вот тебе простенькая типа фенечка. Глупо?

В такой интерпретации - да.
VaStaNi wrote:
Пишется прожка (парсер это слишком громко ), которая ищет символ ";" и удаляет весь остаток строки до 0Dh, 0Ah в листинге
любых сорцов типа asm в данном случае.

Пишется, угу. Целая прожка, угу. Команда sed -i 's/;.*//' file.asm - и всё (короче даже, чем описание задания). Сэкономленное на "написании прожки" время можно использовать для флуда на форумах, домысливания целей других и, в особо исключительных случаях, для программирования ещё чего-нибудь. (Ну, если для красоты ещё потребовать, чтобы в случае, если кроме комментария на строчке только пробельные символы, то удалять всю строку, то команда несколько удлиннится до sed -i -e '/^\w*;/d' -e 's/;.*//' file.asm - опять же короче, чем формулировка. Для обхода всех файлов в подпапках можно засунуть команду в цикл for, если речь о виндовой командной строке, либо find, если об юниксовой.)

Nasarus wrote:
А зачем, собственно, нужно было переключение регистров?

Моя версия такая. Сидит, значит, Ville, и... нет, не думу думает, а кодит. Надо как-то организовать связь между приложениями и ядром. Ясно, что удобнее всего передавать параметры в регистрах - не нужно думать думу о всяких структурах в памяти и перекодировкой указателей. Так, кодит Ville, какие бывают регистры? eax,ebx,ecx,edx,esi,edi, традиционно перечисляемые в таком порядке (esp выделенный, ebp не нужен). Значит, объявляет Ville, приложение пусть передаёт нужные параметры в этих регистрах, используя первые сколько надо в указанном порядке. А системные функции, продолжает Ville, пусть принимают нужные параметры в этих же регистрах. Естественно, номер системной функции ей самой передавать ни к чему. Следовательно, кодит Ville, в передатчике между приложениями и системными функциями регистры загружаются в порядке, смещённом относительно того, как они сохранены при системном вызове (да, там не было ротации регистров - желающие могут посмотреть на svn cat svn://kolibrios.org/trunk/core/syscall.inc@1). О том, что регистр ebx вообще-то традиционно non-volatile во всех конвенциях вызова, так что не мешало бы его трогать, только если не хватило eax+ecx+edx, мысли не возникает. О том, что вообще-то имеет смысл eax использовать под расходные материалы, а не под номер сисфункции, который можно и повторно использовать, - тоже. О том, что от такого решения может появиться совершенно ненужный код в будущем, при нормальном системном вызове, а не как он в данный момент закоден - тем более нет мысли, как и о нормальном системном вызове вообще.


Top
   
PostPosted: Mon Jun 21, 2010 3:33 pm 
Offline
User avatar

Joined: Wed Jan 27, 2010 10:59 am
Posts: 269
Прошу реализовать API-функции ядра для работы с мьютексами. Или хотя бы функции блокировки/разблокировки именнованых областей памяти с привязкой к потоку :)

_________________
ушёл...


Top
   
PostPosted: Mon Jun 21, 2010 4:44 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Уже есть


Top
   
PostPosted: Mon Jun 21, 2010 4:52 pm 
Offline
User avatar

Joined: Wed Jan 27, 2010 10:59 am
Posts: 269
2 Serge
Нет я имел в виду функцию которая вызывалась бы из ring3 с помощью int 0x40 :)

_________________
ушёл...


Top
   
PostPosted: Tue Jun 22, 2010 4:43 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Nazarus
А для чего это нужно? Имеющимися средствами обойтись нельзя?


Top
   
PostPosted: Tue Jun 22, 2010 4:50 pm 
Offline
User avatar

Joined: Wed Jan 27, 2010 10:59 am
Posts: 269
Asper
Да. Теперь уже не нужно :) Проблема решена и эта необходимость отпала.

_________________
ушёл...


Top
   
PostPosted: Tue Jun 22, 2010 4:56 pm 
Offline
User avatar

Joined: Wed Jan 27, 2010 10:59 am
Posts: 269
Т.е. я хотел сказать, что "имеющимися средствами обойтись" МОЖНО. Хотя, ИМХО, ядро полноценной ОС должно предоставлять возможность работы с мьютексами прикладным программам.

_________________
ушёл...


Top
   
PostPosted: Thu Jun 24, 2010 1:05 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
Leency wrote:
Да, все ФМ выдают. КФАР пишет: Ошибка. Файл не найден. Не могу прочитать папку /bd0/2/Она моя/Моя галерея/

В svn.1504 пофиксил баг, приводящий в определённых ситуациях к ошибке файловой системы 5 при чтении существующих папок (не совсем правильная обработка буквы ё в названиях соседних файлов/папок).

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


Top
   
PostPosted: Sat Jul 03, 2010 8:36 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Меня наконец включили в KolibriOS team. Ура! :D


Top
   
PostPosted: Sat Jul 03, 2010 9:05 pm 
А что раньше забывали? О_о


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 300 posts ]  Go to page Previous 110 11 12 13 1420 Next

All times are UTC+03:00


Who is online

Users browsing this forum: Alex2003 and 1 guest


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:  
Powered by phpBB® Forum Software © phpBB Limited