Page 1 of 1

library.obj

Posted: Tue Oct 13, 2015 5:05 pm
by paulcodeman
Библиотека позволяет загрузить в массив список функций и адреса их в массив.
Она содержит 2 указателя на 2 ф-ции.
1 указатель load_lib задается 1 аргумент (путь к библиотеке obj)
2 указатель get_proc задается 1 аргумент (название ф-ции)

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

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

Пример:

Code: Select all

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

Re: library.obj

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

Re: library.obj

Posted: Tue Oct 13, 2015 7:33 pm
by paulcodeman
GerdtR wrote:Забавно: библиотека для загрузки библиотек, которую, впрочем, тоже надо загружать:) Хотя из-за упрощённой структуры импорта(как в Винде по ординалам) она приобретает смысл. Искать ничего не надо.
Еще добавлю lib_init инициализацию, тогда вообще шиик :)
В принципе такое встроить в ядро я думаю было бы не сложно.

Re: library.obj

Posted: Tue Oct 13, 2015 10:56 pm
by GerdtR
Да, не сложно, только как на С, так и на асме её загрузка занимает 4 строки) Вместо 4 строк - 1... Да не, "игра не стоит свеч". Будет новый MENUET02 с таблицой импорта, тогда твоя библиотека вся в ядре окажется, а сейчас это ни к чему.

Re: library.obj

Posted: Sat Oct 17, 2015 6:53 pm
by paulcodeman
Обновленная библиотека, добавлена автоматическая инициализация, пока не полностью (только вставляется указатель на malloc free realoc)

Re: library.obj

Posted: Tue Nov 24, 2015 4:40 am
by paulcodeman
При нахождении ф-ции lib_pointer_library в библиотеке автоматом вставляет указатели на ф-ции: lib_pointer_library(&library.load,&library.get); тем самым экономя и улучшая производительность загрузки библиотеки.