From c72944b5646863ffaaaff94dc03b939a08566203 Mon Sep 17 00:00:00 2001 From: Miguel Date: Wed, 12 Sep 2018 15:23:38 +0200 Subject: struggling with vmem --- asm/asm_usermode.S | 39 +++++++++++++++++++++++++++++++++++++++ asm/asm_usermode.s | 39 --------------------------------------- 2 files changed, 39 insertions(+), 39 deletions(-) create mode 100644 asm/asm_usermode.S delete mode 100644 asm/asm_usermode.s (limited to 'asm') diff --git a/asm/asm_usermode.S b/asm/asm_usermode.S new file mode 100644 index 0000000..a07f480 --- /dev/null +++ b/asm/asm_usermode.S @@ -0,0 +1,39 @@ +.global asm_usermode + +asm_usermode: + + mov 0x4(%esp),%edx //get adress of passed : void func() + //to be called in ring 3 + + // 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 $0x8fff000-3*32 //%eax // current stack + pushl $0xe0000000-3*32 //%eax // current stack (3 values will be poped) we subst 4 to align + 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 %edx // return instruction pointer + + iret + + jmp . // never to be reached + + + + diff --git a/asm/asm_usermode.s b/asm/asm_usermode.s deleted file mode 100644 index 147dfe5..0000000 --- a/asm/asm_usermode.s +++ /dev/null @@ -1,39 +0,0 @@ -.global asm_usermode - -asm_usermode: - - mov 0x4(%esp),%edx //get adress of passed : void func() - //to be called in ring 3 - - // 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 $0x8fff000-3*32 //%eax // current stack - pushl $0xe0000000-3*32 //%eax // current stack (3 values will be poped) - 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 %edx // return instruction pointer - - iret - - jmp . // never to be reached - - - - -- cgit v1.2.3