Она содержит 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
Скачать library.obj последнюю версию
Скачать array.obj последнюю версию