Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вт июн 27, 2017 8:27 am

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




Начать новую тему  Ответить на тему  [ 6 сообщений ] 
Автор Сообщение
 Заголовок сообщения: library.obj
СообщениеДобавлено: Вт окт 13, 2015 5:05 pm 
Не в сети
Аватара пользователя

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

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

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

Пример:

Код:
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 последнюю версию


Вложения:
Комментарий к файлу: Для gcc.
library.h [1010 байт]
21 скачивание


Последний раз редактировалось pavelyakov Чт ноя 26, 2015 4:54 pm, всего редактировалось 4 раза.
Вернуться к началу
 Заголовок сообщения: Re: library.obj
СообщениеДобавлено: Вт окт 13, 2015 7:19 pm 
Не в сети
Аватара пользователя

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

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


Вернуться к началу
 Заголовок сообщения: Re: library.obj
СообщениеДобавлено: Вт окт 13, 2015 7:33 pm 
Не в сети
Аватара пользователя

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

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


Вернуться к началу
 Заголовок сообщения: Re: library.obj
СообщениеДобавлено: Вт окт 13, 2015 10:56 pm 
Не в сети
Аватара пользователя

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

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


Вернуться к началу
 Заголовок сообщения: Re: library.obj
СообщениеДобавлено: Сб окт 17, 2015 6:53 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 156
Обновленная библиотека, добавлена автоматическая инициализация, пока не полностью (только вставляется указатель на malloc free realoc)


Последний раз редактировалось pavelyakov Вт ноя 24, 2015 4:41 am, всего редактировалось 1 раз.

Вернуться к началу
 Заголовок сообщения: Re: library.obj
СообщениеДобавлено: Вт ноя 24, 2015 4:40 am 
Не в сети
Аватара пользователя

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


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 6 сообщений ] 

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


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

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


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

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