int main() { video_write_string("Keyboard buffer at: 0x"); video_write_hex((uint64_t)&keyboard_kbuffer); video_write_nl(); video_write_string("Keyboard buffer size: "); video_write_dec((uint64_t)KEYBOARD_BUFFER_SIZE); video_write_nl(); video_write_line("[Kernel Main]"); video_write_string(" Shell code module at 0x"); video_write_hex((uint64_t)shellCodeModuleAddress); video_write_nl(); video_write_line("Calling shell module..."); video_write_nl(); ((EntryPoint)shellCodeModuleAddress)(); return 0; }
void * initializeKernelBinary() { load_kernel_modules(); clearBSS(&bss, &endOfKernel - &bss); video_initialize(); video_clear_screen(); video_write_line("[x64BareBones]"); video_write_string(" text: 0x"); video_write_hex((uint64_t)&text); video_write_nl(); video_write_string(" rodata: 0x"); video_write_hex((uint64_t)&rodata); video_write_nl(); video_write_string(" data: 0x"); video_write_hex((uint64_t)&data); video_write_nl(); video_write_string(" bss: 0x"); video_write_hex((uint64_t)&bss); video_write_nl(); video_write_line("[Done]"); screensaver_reset_timer(); video_write_line("Kernel cargado."); return getStackBase(); }
static void sigwrapper(task_t* task, signal_t sig, task_state_t oldstate) { kdebug("Executing signal handler\n"); if (task->sighandlers[sig] != NULL) { task_atomic(task); task->sighandlers[sig](sig); task_unatomic(task); } else { video_write_line(video_current_console(), "Signal handler not set!"); } task->state = oldstate; //Esperamos a que llegue la proxima interrupcion. Si llamamos a reschedule, se estaria pusheando //un contexto invalido. halt(); }