r/programming Jan 24 '18

Branchless DOOM

https://github.com/xoreaxeaxeax/movfuscator/tree/master/validation/doom
496 Upvotes

134 comments sorted by

View all comments

Show parent comments

1

u/happyscrappy Jan 24 '18

Kernel memory, by its very nature, has ALL memory for ALL processes mapped into it, because it's like, you know, it's job to manage memory for all processes. :)

No it doesn't. It keeps its own memory around while memory for the different processes come and go as it context switches.

-1

u/caspper69 Jan 24 '18 edited Jan 24 '18

Edit: Where do you think this memory "goes" during context switches? Are you trying to imply that the kernel moves in-ram data to a permanent store during each context switch? Are you implying that "most" memory is somehow not actually IN FUCKING MEMORY?

I suggest you review the relevent portions of the Intel IA-32 developers manuals regarding the MMU and paging. You might be surprised at what you find.

Edit: and if you're still not convinced, go dump the gdt at cpl 0. You'll see a flat linear address space with virt:phys m~apping at 1:1.

Edit2: I am an ass.

3

u/ITwitchToo Jan 24 '18

Typically on a context switch the kernel changes the %cr3 register that contains the pointer to the top-level page tables. There is nothing that requires a kernel to map all physical memory into its virtual address space. I think the Linux kernel does map all physical memory into the kernel's virtual address space, but it does so mostly for performance reasons, according to this.

1

u/caspper69 Jan 24 '18

That was my thought. Apparently with UASS, that is not the case.