Fixed initialize_context()

Function did not take 'popal' instruction into account when initializing stack
This commit is contained in:
2021-04-17 06:26:56 -05:00
parent a68a4dff11
commit 461194fdfd

View File

@@ -1,6 +1,24 @@
#include "context.h"
#include "pageallocator.h"
#include "mmgr.h"
#include "string.h"
struct process_state_t
{
uint32_t edi;
uint32_t esi;
uint32_t ebp;
uint32_t esp_temp;
uint32_t ebx;
uint32_t edx;
uint32_t ecx;
uint32_t eax;
uint32_t eip;
uint32_t cs;
uint32_t flags;
uint32_t esp;
uint32_t ss;
};
void *initialize_context(void *task_entry, struct page_stack_t *page_stack)
{
@@ -9,16 +27,18 @@ void *initialize_context(void *task_entry, struct page_stack_t *page_stack)
unmap_page((void*)0xFF7FE000);
unmap_page((void*)0xFF7FC000);
uint32_t flags;
uint32_t *stack = (uint32_t*)((void*)0xFF800000 - 20);
struct process_state_t *stack = (struct process_state_t*)((void*)0xFF800000 - 20 - 8*4);
asm("pushf; "
"mov (%%esp), %0; "
"popf; "
: "=r"(flags));
stack[0] = (uint32_t)task_entry;
stack[1] = 27;
stack[2] = flags;
stack[3] = 0xFF7FE000;
stack[4] = 35;
memset(stack, 0, sizeof(*stack));
stack->eip = (uint32_t)task_entry;
stack->cs = 27;
stack->flags = flags;
stack->esp = 0xFF7FE000;
stack->ss = 35;
stack->esp_temp = &stack->eax;
return (void*)stack;
}