mirror of https://github.com/0Nera/BMOSP.git
Небольшие исправления
This commit is contained in:
parent
230eecc911
commit
ac3e6705d4
|
@ -1,3 +1,3 @@
|
|||
#define VERSION_MAJOR 0
|
||||
#define VERSION_MINOR 2
|
||||
#define VERSION_BUILD 94
|
||||
#define VERSION_BUILD 96
|
||||
|
|
13
kernel/elf.c
13
kernel/elf.c
|
@ -9,6 +9,7 @@
|
|||
#include <mod.h>
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
elf64_header_t *elf64_get_header(void *data) {
|
||||
return (elf64_header_t *)(data);
|
||||
}
|
||||
|
@ -70,10 +71,12 @@ void *elf_entry(void *module_bin) {
|
|||
LOG("\t\tОшибка! Модуль неправильно собран!\n");
|
||||
for (;;) { asm volatile("pause"); }
|
||||
}
|
||||
elf_parse((elf64_header_t *)module_bin);
|
||||
void *h = elf_parse((elf64_header_t *)module_bin);
|
||||
|
||||
if (h == NULL) { return NULL; }
|
||||
|
||||
// Возвращаем указатель на точку входа
|
||||
return (void *)((uint64_t)elf_header->e_entry + (uint64_t)module_bin);
|
||||
return (void *)((uint64_t)h + (uint64_t)module_bin);
|
||||
}
|
||||
|
||||
void import_test( ) {
|
||||
|
@ -86,7 +89,7 @@ void *elf_parse(elf64_header_t *head) {
|
|||
if (head->e_ident[0] != ELFMAG0 || head->e_ident[1] != ELFMAG1 || head->e_ident[2] != ELFMAG2 ||
|
||||
head->e_ident[3] != ELFMAG3) {
|
||||
LOG("Ошибка: Неправильный формат!\n");
|
||||
return -1;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// LOG("Точка входа: 0x%x\n", head->e_entry);
|
||||
|
@ -121,7 +124,7 @@ void *elf_parse(elf64_header_t *head) {
|
|||
if (tool_strcmp(string_table + sym->st_name, "import_test") == 0) {
|
||||
log_printf("0x%x\n", head + sym->st_value);
|
||||
void (*imp)( ) = (void *)head + sym->st_value;
|
||||
*imp = &import_test;
|
||||
// imp = &import_test;
|
||||
}
|
||||
break;
|
||||
case STT_FUNC: log_printf("объект кода\n"); break;
|
||||
|
@ -139,5 +142,5 @@ void *elf_parse(elf64_header_t *head) {
|
|||
LOG("Таблица символов не найдена!\n");
|
||||
}
|
||||
|
||||
return (void *)0;
|
||||
return (void *)head->e_entry;
|
||||
}
|
|
@ -117,7 +117,12 @@ void mod_init( ) {
|
|||
continue;
|
||||
}
|
||||
|
||||
module_info_t (*module_init)(env_t *env) = (module_info_t(*)(env_t * env)) elf_entry(module_ptr->address);
|
||||
module_info_t (*module_init)(env_t * env) = (module_info_t(*)(env_t * env)) elf_entry(module_ptr->address);
|
||||
|
||||
if (module_init == NULL) {
|
||||
LOG("Модуль %s неисправен\n", module_ptr->cmdline);
|
||||
continue;
|
||||
}
|
||||
|
||||
// LOG("\t->Точка входа: 0x%x\n", module_init);
|
||||
|
||||
|
|
Loading…
Reference in New Issue