Penguin

Differences between current version and predecessor to the previous major change of MemoryMap.

Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History

Newer page: version 10 Last edited on Tuesday, March 20, 2007 12:56:45 pm by PerryLorier
Older page: version 8 Last edited on Sunday, November 14, 2004 12:20:47 pm by AristotlePagaltzis Revert
@@ -1,56 +1,73 @@
-The [Linux] VirtualMemory Map (as seen by a UserSpace program)  
-  
-| __Starts at__ | __Contains__  
-| ffffffff |< End of the universe  
-| ffffe000 |< vsyscall table (new in 2.5.x)  
-| c0000000 |< Off limits, reserved for the kernel  
-| bfffffff |< Process stack (grows down)  
-| bffff000 |< Process heap (grows up)  
-| 40000000 |< Libraries  
-| zzzzzzzz |< Unused  
-| yyyyyyyy |< __.bss__, uninitialised program data  
-| xxxxxxxx |< __.data__ segment, initialised program data  
-| 08048000 |< __.text__ segment, program code  
-| 00000000 |< Unmapped to trap [NULL] pointers  
- 
+The [Linux] VirtualMemory Map (as seen by a UserSpace program)<br>  
+<code>  
+<?plugin OldStyleTable  
+| __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)) 
+<verbatim>  
  $ ldd /bin/ls 
  librt.so.1 => /lib/librt.so.1 (0x40026000) 
  libc.so.6 => /lib/libc.so.6 (0x40038000) 
  libpthread.so.0 => /lib/libpthread.so.0 (0x4016a000) 
  /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) 
+</verbatim>  
  
-!Program code 
+!Program code<br>  
+<verbatim>  
  $ cat > x.c 
+  
  #include <stdio.h> 
  int main(void) {printf("%p\n", main);return 0;} 
  $ gcc -o x x.c && ./x 
  0x8048344 
 
+</verbatim>  
 (this is printing the address of the main function.) 
  
 !Process Heap 
+<verbatim>  
  $ cat > x2.c 
+  
  #include <stdio.h> 
  int main(void) {char c;printf("%p\n", &c); return 0;} 
  $ gcc -o x2 x2.c && ./x2 
  0xbffffab7 
+</verbatim>  
  
 !Process Data and bss segment 
+  
+<verbatim>  
  $ perl -e 'my $var; print \$var . "\n"' 
- SCALAR(0x814f38c) 
+ SCALAR(0x814f38c)<br>  
+</verbatim>  
 (note that this is the address in the [Perl] interpreter) 
  
+<verbatim>  
  $ cat > x3.c 
+  
  #include <stdio.h> 
  #include <stdlib.h> 
  int main(void) {char *p=!malloc(3);printf("%p\n", p); return 0;} 
  $ gcc -o x3 x3.c && ./x3 
  0x8049628 
-  
+</verbatim>  
 Also, 
+<verbatim>  
  cat /proc/''pid''/maps 
+</verbatim>  
 gives you the memory map for a program :)