Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

memory map of a shared library in linux

When I look at a process's memory map using

cat /proc/pid/maps

There are entries like this:

40321000-40336000 r-xp 00000000 b3:15 875        /system/lib/libm.so
40336000-40337000 r--p 00014000 b3:15 875        /system/lib/libm.so
40337000-40338000 rw-p 00015000 b3:15 875        /system/lib/libm.so
40338000-40345000 r-xp 00000000 b3:15 789        /system/lib/libcutils.so
40345000-40346000 r--p 0000c000 b3:15 789        /system/lib/libcutils.so
40346000-40347000 rw-p 0000d000 b3:15 789        /system/lib/libcutils.so
40347000-40355000 rw-p 00000000 00:00 0 
40355000-403bc000 r-xp 00000000 b3:15 877        /system/lib/libmedia.so
403bc000-403bd000 ---p 00000000 00:00 0 
403bd000-403d0000 r--p 00067000 b3:15 877        /system/lib/libmedia.so
403d0000-403d1000 rw-p 0007a000 b3:15 877        /system/lib/libmedia.so
403d1000-403d5000 rw-p 00000000 00:00 0 
403d5000-403d8000 rw-p 00000000 00:00 0 

I understand the .so represents the shared libraries the process maps. It seems each .so has 3 entries and their permissions are r-xp r--p rw-p

So how do I interpret this? Can I assume the r-xp is the code section of the library, since it has the x (execute) permission? How about the r--p and rw-p, are they the data sections?

What about the empty entries? For example, the last 6 entries about libmedia have three empty entires (00:00 0). What are these?

403bc000-403bd000 ---p 00000000 00:00 0 
403bd000-403d0000 r--p 00067000 b3:15 877        /system/lib/libmedia.so
403d0000-403d1000 rw-p 0007a000 b3:15 877        /system/lib/libmedia.so
403d1000-403d5000 rw-p 00000000 00:00 0 
403d5000-403d8000 rw-p 00000000 00:00 0 
like image 959
jiawen Avatar asked Oct 20 '22 11:10

jiawen


1 Answers

Can I assume the r-xp is the code section of the library, since it has the x (execute) permission?

Yes, but this is known as text segment(which stores the instruction). You should also note that it does not have write permission as it should not have.

How about the r--p and rw-p, are they the data sections?

Yes,These segments store the static/global variable. However constant global variable would be stored into r--p segment as it should not be modifiable by any program.

What about the empty entries? For example, the last 6 entries about libmedia have three empty entires (00:00 0). What are these? These might be the guard segment(kernel inserts these segments to protect the overflow scenario). The "p" indicates that its private.

EDIT For complete information, you may want to refer the following link:

http://linux.die.net/man/5/proc

like image 118
Mantosh Kumar Avatar answered Oct 23 '22 02:10

Mantosh Kumar