On Wed, Apr 9, 2008 at 1:05 AM, Robert P. J. Day <rpjday@xxxxxxxxxxxxxx> wrote: > > when i run "pmap" to examine the VMAs corresponding to, say, init, > how am i supposed to interpret the "Offset" column. here: > > # pmap -d 1 > 1: init [5] > Address Kbytes Mode Offset Device Mapping > 00110000 4 r-x-- 0000000000110000 000:00000 [ anon ] > 00967000 220 r-x-- 0000000000000000 0fd:00000 libsepol.so.1 > 0099e000 4 rwx-- 0000000000036000 0fd:00000 libsepol.so.1 > 00a3d000 100 r-x-- 0000000000000000 0fd:00000 libselinux.so.1 > 00a56000 8 rwx-- 0000000000018000 0fd:00000 libselinux.so.1 > 00ab0000 108 r-x-- 0000000000000000 0fd:00000 ld-2.7.so > 00acb000 4 r-x-- 000000000001a000 0fd:00000 ld-2.7.so > 00acc000 4 rwx-- 000000000001b000 0fd:00000 ld-2.7.so > ... etc etc ... > > so there's my listing of VMAs corresponding to the "init" process, > and i can see the addresses of each VMA, but what is the informational > value in the Offset field? > > if you look at the two entries for, say, libsepol.so.1, those have > distinct addresses, but the first entry has an offset of zero, while > the second has an offset of 0x36000. is that offset meant to > represent the offset with respect to the beginning of a multi-VMA > file? or what? thanks. > > rday > -- First noticed that there is a identical information provided by "pmap -d 1" and "cat /proc/1/maps": /root/download/linux-2.6_latest/fs/proc>cat /proc/1/maps 003ed000-00408000 r-xp 00000000 08:05 262713 /lib/ld-2.6.so 00408000-00409000 r--p 0001a000 08:05 262713 /lib/ld-2.6.so 00409000-0040a000 rw-p 0001b000 08:05 262713 /lib/ld-2.6.so 0040c000-0055a000 r-xp 00000000 08:05 262714 /lib/libc-2.6.so 0055a000-0055c000 r--p 0014e000 08:05 262714 /lib/libc-2.6.so 08051000-08072000 rw-p 08051000 00:00 0 [heap] 441bd000-441c0000 r-xp 00000000 08:05 260873 /lib/libdl-2.6.so 4cfaa000-4cfc0000 r-xp 00000000 08:05 261141 /lib/libselinux.so.1 4cfc0000-4cfc2000 rw-p 00015000 08:05 261141 /lib/libselinux.so.1 b7f59000-b7f5b000 rw-p b7f59000 00:00 0 b7f6e000-b7f6f000 r-xp b7f6e000 00:00 0 [vdso] bfe59000-bfe6e000 rw-p bffeb000 00:00 0 [stack] /root/download/linux-2.6_latest/fs/proc>pmap -d 1 1: init [5] Address Kbytes Mode Offset Device Mapping 003ed000 108 r-x-- 0000000000000000 008:00005 ld-2.6.so 00408000 4 r---- 000000000001a000 008:00005 ld-2.6.so 00409000 4 rw--- 000000000001b000 008:00005 ld-2.6.so 0040c000 1336 r-x-- 0000000000000000 008:00005 libc-2.6.so 0055a000 8 r---- 000000000014e000 008:00005 libc-2.6.so 08051000 132 rw--- 0000000008051000 000:00000 [ anon ] 441bd000 12 r-x-- 0000000000000000 008:00005 libdl-2.6.so b7f6e000 4 r-x-- 00000000b7f6e000 000:00000 [ anon ] bfe59000 84 rw--- 00000000bffeb000 000:00000 [ stack ] mapped: 2136K writeable/private: 304K shared: 0K (some parts truncated above). Since the mapping to /proc is possible, we shall use the kernel source code: fs/proc/task_mmu.c: show_map(): seq_printf(m, "%08lx-%08lx %c%c%c%c %08lx %02x:%02x %lu %n", vma->vm_start, vma->vm_end, flags & VM_READ ? 'r' : '-', flags & VM_WRITE ? 'w' : '-', flags & VM_EXEC ? 'x' : '-', flags & VM_MAYSHARE ? 's' : 'p', vma->vm_pgoff << PAGE_SHIFT, MAJOR(dev), MINOR(dev), ino, &len); So unambiguously, the offset correspond to vma->vm_pgoff << PAGE_SHIFT, which is I am not really sure of its semantic meaning. But looking at the definition of vma (vm_area_struct in inlcude/linux/mm_types.h): /* Information about our backing store: */ unsigned long vm_pgoff; /* Offset (within vm_file) in PAGE_SIZE units, *not* PAGE_CACHE_SIZE */ struct file * vm_file; /* File we map to (can be NULL). */ There goes the answer :-). -- Regards, Peter Teoh -- To unsubscribe from this list: send an email with "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx Please read the FAQ at http://kernelnewbies.org/FAQ