Home
Main website
Display Sidebar
Hide Ads
Recent Changes
View Source:
MemoryMap
Edit
PageHistory
Diff
Info
LikePages
You are viewing an old revision of this page.
View the current version
.
The [Linux] VirtualMemory Map (as seen by a UserSpace program)<br> <code> | __Starts at__| __Contains__<br> | ffffffff |< End of the universe<br> | ffffe000 |< vsyscall table (new in 2.5.x)<br> | c0000000 |< Off limits, reserved for the kernel<br> | bfffffff |< Process stack (grows down)<br> | bffff000 |< Process heap (grows up)<br> | 40000000 |< Libraries<br> | zzzzzzzz |< Unused<br> | yyyyyyyy |< __.bss__, uninitialised program data<br> | xxxxxxxx |< __.data__ segment, initialised program data<br> | 08048000 |< __.text__ segment, program code<br> | 00000000 |< Unmapped to trap [NULL] pointers<br><br> </code> "BSS" means __b__lock __s__tarted by __s__ymbol and is a segment of uninitialised that is only stored in the BinaryExecutable image as a length and offset, since it would otherwise waste space. The "text" segment on the other hand contains ''initialized'' global variables and ''is'' stored in the BinaryExecutable. !!Practical examples !Library-mapped memory (using ldd(1)) $ ldd /bin/ls<br> librt.so.1 => /lib/librt.so.1 (0x40026000)<br> libc.so.6 => /lib/libc.so.6 (0x40038000)<br> libpthread.so.0 => /lib/libpthread.so.0 (0x4016a000)<br> /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)<br> !Program code<br> $ cat > x.c<br> #include <stdio.h><br> int main(void) {printf("%p\n", main);return 0;}<br> $ gcc -o x x.c && ./x<br> 0x8048344<br> $<br> (this is printing the address of the main function.)<br> !Process Heap $ cat > x2.c<br> <code> #include <stdio.h><br> int main(void) {char c;printf("%p\n", &c); return 0;}<br></code> $ gcc -o x2 x2.c && ./x2<br> 0xbffffab7<br> !Process Data and bss segment $ perl -e 'my $var; print \$var . "\n"'<br> SCALAR(0x814f38c)<br> (note that this is the address in the [Perl] interpreter)<br> $ cat > x3.c #include <stdio.h><br> #include <stdlib.h><br> int main(void) {char *p=!malloc(3);printf("%p\n", p); return 0;}<br> $ gcc -o x3 x3.c && ./x3<br> 0x8049628<br> Also, cat /proc/''pid''/maps gives you the memory map for a program :)
One page links to
MemoryMap
:
VirtualMemory