mirror of
https://github.com/0Nera/BMOSP.git
synced 2025-01-20 19:42:02 +03:00
Небольшие исправления
This commit is contained in:
parent
230eecc911
commit
ac3e6705d4
@ -1,3 +1,3 @@
|
|||||||
#define VERSION_MAJOR 0
|
#define VERSION_MAJOR 0
|
||||||
#define VERSION_MINOR 2
|
#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 <mod.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
|
||||||
elf64_header_t *elf64_get_header(void *data) {
|
elf64_header_t *elf64_get_header(void *data) {
|
||||||
return (elf64_header_t *)(data);
|
return (elf64_header_t *)(data);
|
||||||
}
|
}
|
||||||
@ -70,10 +71,12 @@ void *elf_entry(void *module_bin) {
|
|||||||
LOG("\t\tОшибка! Модуль неправильно собран!\n");
|
LOG("\t\tОшибка! Модуль неправильно собран!\n");
|
||||||
for (;;) { asm volatile("pause"); }
|
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( ) {
|
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 ||
|
if (head->e_ident[0] != ELFMAG0 || head->e_ident[1] != ELFMAG1 || head->e_ident[2] != ELFMAG2 ||
|
||||||
head->e_ident[3] != ELFMAG3) {
|
head->e_ident[3] != ELFMAG3) {
|
||||||
LOG("Ошибка: Неправильный формат!\n");
|
LOG("Ошибка: Неправильный формат!\n");
|
||||||
return -1;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// LOG("Точка входа: 0x%x\n", head->e_entry);
|
// 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) {
|
if (tool_strcmp(string_table + sym->st_name, "import_test") == 0) {
|
||||||
log_printf("0x%x\n", head + sym->st_value);
|
log_printf("0x%x\n", head + sym->st_value);
|
||||||
void (*imp)( ) = (void *)head + sym->st_value;
|
void (*imp)( ) = (void *)head + sym->st_value;
|
||||||
*imp = &import_test;
|
// imp = &import_test;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case STT_FUNC: log_printf("объект кода\n"); break;
|
case STT_FUNC: log_printf("объект кода\n"); break;
|
||||||
@ -139,5 +142,5 @@ void *elf_parse(elf64_header_t *head) {
|
|||||||
LOG("Таблица символов не найдена!\n");
|
LOG("Таблица символов не найдена!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
return (void *)0;
|
return (void *)head->e_entry;
|
||||||
}
|
}
|
@ -119,6 +119,11 @@ void mod_init( ) {
|
|||||||
|
|
||||||
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);
|
// LOG("\t->Точка входа: 0x%x\n", module_init);
|
||||||
|
|
||||||
main_env.offset = (uint64_t)module_ptr->address;
|
main_env.offset = (uint64_t)module_ptr->address;
|
||||||
|
Loading…
Reference in New Issue
Block a user