Board.KolibriOS.org

Official KolibriOS board
It is currently Sat Apr 20, 2019 7:55 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 6 posts ] 
Author Message
 Post subject: library.obj
PostPosted: Tue Oct 13, 2015 5:05 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 252
Библиотека позволяет загрузить в массив список функций и адреса их в массив.
Она содержит 2 указателя на 2 ф-ции.
1 указатель load_lib задается 1 аргумент (путь к библиотеке obj)
2 указатель get_proc задается 1 аргумент (название ф-ции)

Импорт ф-ции library.obj немного отличается от стандартных. Для удобства не стал добавлять имена ф-ции, считаю это лишним, а просто добавил 2 указателя. Вместо {char *name,void *data} просто {void *data}

Взаимодействующая ф-ция array.obj, позволяет генерировать массив, сохранять значение по ключу, а так же получать значение.

Пример:

Code:
typedef dword unsigned int;
dword* cofflib_load(char *name)
{
  asm volatile ("int $0x40"::"a"(68), "b"(19), "c"(name));
}
dword(* _stdcall lib_load)(char *path);
void *(* _stdcall proc_lib)(char *name);
char init_check_lib = 0;
dword load_library(char *path)
{
  if(!init_check_lib)
  {
    dword *imp = cofflib_load("/sys/lib/library.obj");
    lib_load = (void *)imp[0];
    proc_lib= (void *)imp[1];
    init_check_lib = 1;
  }
  return lib_load(path);
}
load_library("/sys/lib/console.obj");
proc_lib("con_init"); // возвращает адрес на ф-цию con_init


Так же хочу отметить, при загрузки (load_library) несколько библиотек, ф-ции добавляются в общий массив, если будет совпадение названия, то предыдущий указатель на ф-цию заменяется новым!

Скачать library.obj последнюю версию
Скачать array.obj последнюю версию


Attachments:
File comment: Для gcc.
library.h [1010 Bytes]
Downloaded 85 times


Last edited by pavelyakov on Thu Nov 26, 2015 4:54 pm, edited 4 times in total.
Top
   
 Post subject: Re: library.obj
PostPosted: Tue Oct 13, 2015 7:19 pm 
Offline
User avatar

Joined: Mon Nov 19, 2012 5:22 pm
Posts: 455
Забавно: библиотека для загрузки библиотек, которую, впрочем, тоже надо загружать:) Хотя из-за упрощённой структуры импорта(как в Винде по ординалам) она приобретает смысл. Искать ничего не надо.

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!


Top
   
 Post subject: Re: library.obj
PostPosted: Tue Oct 13, 2015 7:33 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 252
GerdtR wrote:
Забавно: библиотека для загрузки библиотек, которую, впрочем, тоже надо загружать:) Хотя из-за упрощённой структуры импорта(как в Винде по ординалам) она приобретает смысл. Искать ничего не надо.

Еще добавлю lib_init инициализацию, тогда вообще шиик :)
В принципе такое встроить в ядро я думаю было бы не сложно.


Top
   
 Post subject: Re: library.obj
PostPosted: Tue Oct 13, 2015 10:56 pm 
Offline
User avatar

Joined: Mon Nov 19, 2012 5:22 pm
Posts: 455
Да, не сложно, только как на С, так и на асме её загрузка занимает 4 строки) Вместо 4 строк - 1... Да не, "игра не стоит свеч". Будет новый MENUET02 с таблицой импорта, тогда твоя библиотека вся в ядре окажется, а сейчас это ни к чему.

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!


Top
   
 Post subject: Re: library.obj
PostPosted: Sat Oct 17, 2015 6:53 pm 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 252
Обновленная библиотека, добавлена автоматическая инициализация, пока не полностью (только вставляется указатель на malloc free realoc)


Last edited by pavelyakov on Tue Nov 24, 2015 4:41 am, edited 1 time in total.

Top
   
 Post subject: Re: library.obj
PostPosted: Tue Nov 24, 2015 4:40 am 
Offline
User avatar

Joined: Wed Apr 15, 2015 11:13 pm
Posts: 252
При нахождении ф-ции lib_pointer_library в библиотеке автоматом вставляет указатели на ф-ции: lib_pointer_library(&library.load,&library.get); тем самым экономя и улучшая производительность загрузки библиотеки.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 6 posts ] 

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users 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