#ifndef LIBRARY_H #define LIBRARY_H #pragma pack(push,1) typedef struct { char *name; void *data; } struct_import_lib_init; #pragma pack(pop) typedef struct { int (*load)(char *path); unsigned int (*get)(char *name); } OBJECT_LIBRARY; static char init_load_obj = 0; static int (* _stdcall _ptr_load_dll_)(char *path); static unsigned int (* _stdcall _ptr_get_dll_)(char *path); static inline int _OBJECT__LOAD_(char *path) { struct_import_lib_init *imp; if(!init_load_obj) { asm("int $0x40":"=a"(imp):"a"(68), "b"(19), "c"("/sys/lib/library.obj")); _ptr_load_dll_ = imp[0].data; _ptr_get_dll_ = imp[1].data; init_load_obj = 1; } return _ptr_load_dll_(path); } static inline unsigned int _OBJECT__GET_(char *name) { return _ptr_get_dll_(name); } static inline OBJECT_LIBRARY library = {&_OBJECT__LOAD_,&_OBJECT__GET_}; /* Example: void*(* stdcall name_func)(...); library.load("/sys/lib/... .obj"); name_func = library.get("name_function"); name_func(...); */ #endif