flat assembler
Message board for the users of flat assembler.
 Home   FAQ   Search   Register 
 Profile   Log in to check your private messages   Log in 
flat assembler > OS Construction > Paging in ring 3

Author
Thread Post new topic Reply to topic
Aulendil



Joined: 13 Jul 2014
Posts: 14
Paging in ring 3
In my OS I have set up paging (1:1 for first 2MiB, supervisor only), long mode and have now successfully entered ring 3 using iret.

My kernel is loaded at 1800h.

Since I only have supervisor pages configured how come when I enter ring 3 I don't get any errors when I directly address memory?

Have I massively misunderstood how paging and security works?

Page tables:


Code:

        mov edi10000h
        mov ecx4000h shr 2
        xor eaxeax
        rep stosd

        ; PML4
        mov dword [10000h], 11000h + 111b

        ; PDPT
        mov dword [11000h], 12000h + 111b

        ; PD1
        mov dword 12000h],13000h + 111b

        mov edi13000h
        mov eax0 + 111b
        mov ecx512

        write_pages:
                stosd
                add edi4
                add eax1000h
                loop write_pages
      
     ; Enable long mode, enable paging....




Ring 3:


Code:

        cli
        mov ax0x1B
        mov dsax
        mov esax
        mov fsax
        mov gsax

        mov raxrsp

        push 0x1B
        push rax
        pushf

        ; Enable interrupts in user mode
        pop rax
        or rax0x200
        push rax

        push 0x23
        push main_loop
        iretq

      ; .....
     main_loop:
         ; Code executed in ring 3 from here on
        mov byte [0x1801], 1 ; - Why don't I get an error by doing this?





Last edited by Aulendil on 14 Jan 2016, 15:19; edited 1 time in total
Post 14 Jan 2016, 13:13
View user's profile Send private message Reply with quote
revolution
When all else fails, read the source


Joined: 24 Aug 2004
Posts: 15165
Location: GW170817
Show your page settings. Show your code. Show us something. We don't know what you have done.
Post 14 Jan 2016, 14:17
View user's profile Send private message Visit poster's website Reply with quote
Aulendil



Joined: 13 Jul 2014
Posts: 14
Sorry I've updated my post..
Post 14 Jan 2016, 15:19
View user's profile Send private message Reply with quote
l_inc



Joined: 23 Oct 2009
Posts: 878
Aulendil

Quote:

Code:
        ; PML4
        mov dword [10000h], 11000h + 111b

        ; PDPT
        mov dword [11000h], 12000h + 111b

        ; PD1
        mov dword 12000h],13000h + 111b

        mov edi13000h
        mov eax0 + 111b 



By setting the U/S bit you're explicitly allowing the usermode accesses.

_________________
Faith is a superposition of knowledge and fallacy
Post 14 Jan 2016, 17:48
View user's profile Send private message Reply with quote
Aulendil



Joined: 13 Jul 2014
Posts: 14
OK so yes a slight mistake Wink

So having changed the u/s bit on the PML4/PDPT/PD1+table pages that now causes a lockup when in user land now which is what I was expecting.

How would I now add a second page directory with a table mapping 1MiB of 1:1 memory with physical addresses from 0x200000 - 0x2FFFFFF?
Post 15 Jan 2016, 16:23
View user's profile Send private message Reply with quote
Display posts from previous:
Post new topic Reply to topic

Jump to:  


< Last Thread | Next Thread >

Forum Rules:
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001-2005 phpBB Group.

Main index   Download   Documentation   Examples   Message board
Copyright © 2004-2016, Tomasz Grysztar.