Fixed initialize_context()
Function did not take 'popal' instruction into account when initializing stack
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user