From f92a23a2fcee6cbb97af9c7681e6872374d3c789 Mon Sep 17 00:00:00 2001 From: Michal Idziorek Date: Sat, 16 May 2015 03:48:35 +0200 Subject: finally working ring 3 --- asm/usermode.s | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 asm/usermode.s (limited to 'asm/usermode.s') diff --git a/asm/usermode.s b/asm/usermode.s new file mode 100644 index 0000000..acf4b04 --- /dev/null +++ b/asm/usermode.s @@ -0,0 +1,35 @@ +.global asm_usermode +.extern userfunc + +# pass address to func to exec (TODO) +asm_usermode: + + // 0x23 is user data segment (|2 low bits) + // 0x1b is user code segment (|2 low bits) + + // set segment registers + mov $0x23, %ax + mov %ax, %ds + mov %ax, %es + mov %ax, %fs + mov %ax, %gs + // ss is handled by iret + + mov %esp, %eax + + pushl $0x23 // user data segment + pushl %eax // current stack + pushf // + + // http://x86.renejeschke.de/html/file_module_x86_id_145.html + //mov $0x200, %eax + //push %eax // eflags image + pushl $0x1B // return code segment selector + push $userfunc // return instruction pointer + iret + + jmp . // will never be reached? + + + + -- cgit v1.2.3