Looks like they have added a new section GNU_RELRO in the later versions. The one you are referring is read-only section. It would be nice if you share the section header table. <br>Plz see inline<br><br clear="all"><div>Regards,<br>
Prabhunath G<br>Linux Trainer<br>Bangalore<br></div>
<br><br><div class="gmail_quote">On Thu, Mar 7, 2013 at 3:31 PM, Jacky <span dir="ltr">&lt;<a href="mailto:jackyclivia@163.com" target="_blank">jackyclivia@163.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="line-height:1.7;font-size:14px;font-family:arial">Dear all,<br><br>This is the Program Header for &quot;cat&quot; info:<br><br>================================<br>readelf -l /bin/cat <br>...<br>Program Headers:<br>
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align<br>  PHDR           0x000034 0x08048034 0x08048034 0x00120 0x00120 R E 0x4<br>  INTERP         0x000154 0x08048154 0x08048154 0x00013 0x00013 R   0x1<br>
      [Requesting program interpreter: /lib/ld-linux.so.2]<br>  LOAD           0x000000 0x08048000 0x08048000 0x0a00c 0x0a00c R E 0x1000<br>  LOAD           0x00af04 0x08053f04 0x08053f04 0x00258 0x00820 RW  0x1000<br>  DYNAMIC        0x00af10 0x08053f10 0x08053f10 0x000e8 0x000e8 RW  0x4<br>
  NOTE           0x000168 0x08048168 0x08048168 0x00044 0x00044 R   0x4<br>  GNU_EH_FRAME   0x009008 0x08051008 0x08051008 0x002d4 0x002d4 R   0x4<br>  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x4<br>
  GNU_RELRO      0x00af04 0x08053f04 0x08053f04 0x000fc 0x000fc R   0x1<br>==============================<br><br>So there are just 2 PT_LOAD segments. But why kernel maps 3 memory regions ? The following is the maps output:<br>
<br></div></blockquote><div>Though the second PT_LOAD starts at the file offset  0xaf04, The first fc bytes belong to GNU_RELRO segment (The last entry in the Program Header). If you add af04 +fc you get afff. Looks like they have placed this section advertently in such a way that the actual DATA segment will start at the next virtual address page boundary 0x08054000. Thus the GNU_RELRO section with read-only permissions is placed in the separate virtual address region. <br>
    This is the result of the maps file you see below. <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="line-height:1.7;font-size:14px;font-family:arial">
============================<br>cat /proc/self/maps <br><br>08048000-08053000 r-xp 00000000 08:01 261656     /bin/cat<br>08053000-08054000 r--p 0000a000 08:01 261656     /bin/cat<br>08054000-08055000 rw-p 0000b000 08:01 261656     /bin/cat<br>
09b58000-09b79000 rw-p 00000000 00:00 0          [heap]<br>b75bd000-b75be000 rw-p 00000000 00:00 0 <br>b75be000-b7761000 r-xp 00000000 08:01 523958     /lib/i386-linux-gnu/<a href="http://libc-2.15.so" target="_blank">libc-2.15.so</a><br>
...<br>==================<br><br>The above output, there are 3 memory regions for &quot;/bin/cat&quot;, and what is the following segment:<br><br>08053000-08054000 r--p 0000a000 08:01 261656     /bin/cat<br><br>According the &#39;cat&#39; program header, there is no &quot;r&quot; segment.<br>
<br><br>Regards,<br>Jacky<br><br><br> <br><br><br><br><br><br><br></div><br><br><span title="neteasefooter"><span></span></span><br>_______________________________________________<br>
Kernelnewbies mailing list<br>
<a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
<a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
<br></blockquote></div><br>