> You can examine binary images using the nm and objdump commands to display symbols, their addresses, segments, and so on.
You can also use my new tool Bloaty McBloatface (https://github.com/google/bloaty). Check out the -v option especially, which will dump a memory map of both the file domain and the VM address domain:
If you leave off "-d segments" the map will include all sections too (like .bss, .text, etc). Here is an example of that output: http://pastebin.com/3XGcqA8k
> Once virtual addresses are enabled, they apply to all software running in the machine, including the kernel itself. Thus a portion of the virtual address space must be reserved to the kernel
Reserving a portion of the address space for the kernel is a performance optimization and not necessarily required.
In 32-bit macOS the kernel has its own separate address space just like a process. Syscalls copy or map data in and out. The benefit is user mode processes can use all 4 GB. The obvious downside is the extra overhead and TLB flushes.
32/64-bit iOS and 64-bit macOS use the standard convention if having the kernel's address space mapped into all processes. Especially on 64-bit there is no benefit to doing otherwise.
Win9x actually looks more similar to the Linux layout, with ring0 only occupying the highest GB, but has an additional area from 80000000h~BFFFFFFFh which is shared across all user-mode processes and used for things like DLLs.
> You can examine binary images using the nm and objdump commands to display symbols, their addresses, segments, and so on.
You can also use my new tool Bloaty McBloatface (https://github.com/google/bloaty). Check out the -v option especially, which will dump a memory map of both the file domain and the VM address domain:
If you leave off "-d segments" the map will include all sections too (like .bss, .text, etc). Here is an example of that output: http://pastebin.com/3XGcqA8k