<br><br><div class="gmail_quote">2012/7/15 Peter Teoh <span dir="ltr">&lt;<a href="mailto:htmldeveloper@gmail.com" target="_blank">htmldeveloper@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Mulyadi and WangZhe,<div><br></div><div>Nice to write to you again....:-).<br><br><div class="gmail_quote"><div class="im">On Sun, Jul 15, 2012 at 1:49 PM, Mulyadi Santosa <span dir="ltr">&lt;<a href="mailto:mulyadi.santosa@gmail.com" target="_blank">mulyadi.santosa@gmail.com</a>&gt;</span> wrote:<br>



<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi...<br>
<div><br>
On Sun, Jul 15, 2012 at 9:28 AM, ÍõÕÜ &lt;<a href="mailto:wangzhe5004@gmail.com" target="_blank">wangzhe5004@gmail.com</a>&gt; wrote:<br>
&gt; and the second program:<br>
&gt;<br>
&gt; #include &lt;stdio.h&gt;<br>
&gt; #include &lt;unistd.h&gt;<br>
&gt;<br>
&gt; int main(void)<br>
&gt; {<br>
&gt; &nbsp; &nbsp; unsigned long value = 0;<br>
&gt; &nbsp; &nbsp; value = getpid();<br>
&gt; &nbsp; &nbsp; return 0;<br>
&gt; }<br>
&gt;<br>
&gt; and disassembling it:( objdump -d a.out)<br>
&gt; ...<br>
&gt; 08048300 &lt;getpid@plt&gt;:<br>
&gt; &nbsp;8048300: &nbsp; &nbsp;ff 25 00 a0 04 08 &nbsp; &nbsp; &nbsp; &nbsp;jmp &nbsp; &nbsp;*0x804a000<br>
&gt; &nbsp;8048306: &nbsp; &nbsp;68 00 00 00 00 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; push &nbsp; $0x0<br>
&gt; &nbsp;804830b: &nbsp; &nbsp;e9 e0 ff ff ff &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jmp &nbsp; &nbsp;80482f0 &lt;_init+0x3c&gt;<br>
<br>
</div>Looks like jumping into vsyscall page to me...<br>
<span><font color="#888888"><br></font></span></blockquote><div><br></div></div><div>after I start the process, and doing a gdb -p &lt;pid&gt;:</div><div><br></div><div><div>(gdb) disassemble main&nbsp;</div><div>Dump of assembler code for function main:</div>



<div>&nbsp; &nbsp;0x0000000000400564 &lt;+0&gt;:<span style="white-space:pre-wrap">        </span>push &nbsp; %rbp</div><div>&nbsp; &nbsp;0x0000000000400565 &lt;+1&gt;:<span style="white-space:pre-wrap">        </span>mov &nbsp; &nbsp;%rsp,%rbp</div>
<div>&nbsp; &nbsp;0x0000000000400568 &lt;+4&gt;:<span style="white-space:pre-wrap">        </span>sub &nbsp; &nbsp;$0x10,%rsp</div><div>&nbsp; &nbsp;0x000000000040056c &lt;+8&gt;:<span style="white-space:pre-wrap">        </span>movq &nbsp; $0x0,-0x8(%rbp)</div>
<div>&nbsp; &nbsp;0x0000000000400574 &lt;+16&gt;:<span style="white-space:pre-wrap">        </span>mov &nbsp; &nbsp;$0x0,%eax</div><div>&nbsp; &nbsp;0x0000000000400579 &lt;+21&gt;:<span style="white-space:pre-wrap">        </span>callq &nbsp;0x400460 &lt;getpid@plt&gt;</div>



<div>&nbsp; &nbsp;0x000000000040057e &lt;+26&gt;:<span style="white-space:pre-wrap">        </span>cltq &nbsp;&nbsp;</div><div>&nbsp; &nbsp;0x0000000000400580 &lt;+28&gt;:<span style="white-space:pre-wrap">        </span>mov &nbsp; &nbsp;%rax,-0x8(%rbp)</div>
<div>&nbsp; &nbsp;0x0000000000400584 &lt;+32&gt;:<span style="white-space:pre-wrap">        </span>movabs $0x9184e72a000,%rdi</div><div>&nbsp; &nbsp;0x000000000040058e &lt;+42&gt;:<span style="white-space:pre-wrap">        </span>mov &nbsp; &nbsp;$0x0,%eax</div>
<div>&nbsp; &nbsp;0x0000000000400593 &lt;+47&gt;:<span style="white-space:pre-wrap">        </span>callq &nbsp;0x400470 &lt;sleep@plt&gt;</div><div>&nbsp; &nbsp;0x0000000000400598 &lt;+52&gt;:<span style="white-space:pre-wrap">        </span>mov &nbsp; &nbsp;$0x0,%eax</div>



<div>&nbsp; &nbsp;0x000000000040059d &lt;+57&gt;:<span style="white-space:pre-wrap">        </span>leaveq&nbsp;</div><div>&nbsp; &nbsp;0x000000000040059e &lt;+58&gt;:<span style="white-space:pre-wrap">        </span>retq &nbsp;&nbsp;</div>
<div>End of assembler dump.</div><div>(gdb) disassemble getpid</div><div>Dump of assembler code for function getpid:</div><div>&nbsp; &nbsp;0x00007f19ae558530 &lt;+0&gt;:<span style="white-space:pre-wrap">        </span>mov &nbsp; &nbsp;%fs:0x2d4,%edx</div>



<div>&nbsp; &nbsp;0x00007f19ae558538 &lt;+8&gt;:<span style="white-space:pre-wrap">        </span>cmp &nbsp; &nbsp;$0x0,%edx</div><div>&nbsp; &nbsp;0x00007f19ae55853b &lt;+11&gt;:<span style="white-space:pre-wrap">        </span>jle &nbsp; &nbsp;0x7f19ae558540 &lt;getpid+16&gt;</div>



<div>&nbsp; &nbsp;0x00007f19ae55853d &lt;+13&gt;:<span style="white-space:pre-wrap">        </span>mov &nbsp; &nbsp;%edx,%eax</div><div>&nbsp; &nbsp;0x00007f19ae55853f &lt;+15&gt;:<span style="white-space:pre-wrap">        </span>retq &nbsp;&nbsp;</div>
<div>&nbsp; &nbsp;0x00007f19ae558540 &lt;+16&gt;:<span style="white-space:pre-wrap">        </span>jne &nbsp; &nbsp;0x7f19ae558554 &lt;getpid+36&gt;</div><div>&nbsp; &nbsp;0x00007f19ae558542 &lt;+18&gt;:<span style="white-space:pre-wrap">        </span>mov &nbsp; &nbsp;%fs:0x2d0,%eax</div>



<div>&nbsp; &nbsp;0x00007f19ae55854a &lt;+26&gt;:<span style="white-space:pre-wrap">        </span>test &nbsp; %eax,%eax</div><div>&nbsp; &nbsp;0x00007f19ae55854c &lt;+28&gt;:<span style="white-space:pre-wrap">        </span>nopl &nbsp; 0x0(%rax)</div>
<div>&nbsp; &nbsp;0x00007f19ae558550 &lt;+32&gt;:<span style="white-space:pre-wrap">        </span>je &nbsp; &nbsp; 0x7f19ae558554 &lt;getpid+36&gt;</div><div>&nbsp; &nbsp;0x00007f19ae558552 &lt;+34&gt;:<span style="white-space:pre-wrap">        </span>repz retq&nbsp;</div>



<div>&nbsp; &nbsp;0x00007f19ae558554 &lt;+36&gt;:<span style="white-space:pre-wrap">        </span>mov &nbsp; &nbsp;$0x27,%eax</div><div>&nbsp; &nbsp;0x00007f19ae558559 &lt;+41&gt;:<span style="white-space:pre-wrap">        </span>syscall&nbsp;</div>
<div>&nbsp; &nbsp;0x00007f19ae55855b &lt;+43&gt;:<span style="white-space:pre-wrap">        </span>test &nbsp; %edx,%edx</div></div><div><div>&nbsp; &nbsp;0x7f19ae55855d &lt;getpid+45&gt;:<span style="white-space:pre-wrap">        </span>jne &nbsp; &nbsp;0x7f19ae558552 &lt;getpid+34&gt;</div>



<div>&nbsp; &nbsp;0x7f19ae55855f &lt;getpid+47&gt;:<span style="white-space:pre-wrap">        </span>mov &nbsp; &nbsp;%eax,%fs:0x2d0</div><div>&nbsp; &nbsp;0x7f19ae558567 &lt;getpid+55&gt;:<span style="white-space:pre-wrap">        </span>retq &nbsp;&nbsp;</div>
<div><br></div></div></div></div></blockquote><div><br>&nbsp;&nbsp; Hi peter:<br>&nbsp; &nbsp; &nbsp;&nbsp; question1: why your system is &quot;0x00007f19ae558554 &lt;+36&gt;:<span style="white-space:pre-wrap">        </span>mov &nbsp; &nbsp;$0x27,%eax&quot;,<br>getpid syscall&nbsp; number is 0x14<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; question2: i use gdb disassemble getpid just like you and the result:<br><br>&nbsp;&nbsp;&nbsp; (gdb) disassemble getpid<br>&nbsp;Dump of assembler code for function getpid:<br>&nbsp;&nbsp; 0xb7771a40 &lt;+0&gt;:&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %gs:0x6c,%edx<br>
&nbsp;&nbsp; 0xb7771a47 &lt;+7&gt;:&nbsp;&nbsp;&nbsp; cmp&nbsp;&nbsp;&nbsp; $0x0,%edx<br>&nbsp;&nbsp; 0xb7771a4a &lt;+10&gt;:&nbsp;&nbsp;&nbsp; jle&nbsp;&nbsp;&nbsp; 0xb7771a50 &lt;getpid+16&gt;<br>&nbsp;&nbsp; 0xb7771a4c &lt;+12&gt;:&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %edx,%eax<br>&nbsp;&nbsp; 0xb7771a4e &lt;+14&gt;:&nbsp;&nbsp;&nbsp; repz ret <br>&nbsp;&nbsp; 0xb7771a50 &lt;+16&gt;:&nbsp;&nbsp;&nbsp; jne&nbsp;&nbsp;&nbsp; 0xb7771a62 &lt;getpid+34&gt;<br>
&nbsp;&nbsp; 0xb7771a52 &lt;+18&gt;:&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; %gs:0x68,%eax<br>&nbsp;&nbsp; 0xb7771a58 &lt;+24&gt;:&nbsp;&nbsp;&nbsp; test&nbsp;&nbsp; %eax,%eax<br>&nbsp;&nbsp; 0xb7771a5a &lt;+26&gt;:&nbsp;&nbsp;&nbsp; lea&nbsp;&nbsp;&nbsp; 0x0(%esi),%esi<br>&nbsp;&nbsp; 0xb7771a60 &lt;+32&gt;:&nbsp;&nbsp;&nbsp; jne&nbsp;&nbsp;&nbsp; 0xb7771a4e &lt;getpid+14&gt;<br>
&nbsp;&nbsp; 0xb7771a62 &lt;+34&gt;:&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp; $0x14,%eax<br>&nbsp;&nbsp; 0xb7771a67 &lt;+39&gt;:&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp; *%gs:0x10<br><br>&nbsp; can you explain the meaning of &quot;call&nbsp;&nbsp; *%gs:0x10&quot;?<br>&nbsp; <br>&nbsp; Thanks! <br><br><br>&nbsp;<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div><div class="gmail_quote"><div><div></div></div><div>And to check the address space:</div><div><br></div><div><div>(gdb) info sharedlibrary&nbsp;</div><div>From &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;To &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Syms Read &nbsp; Shared Object Library</div>
<div>0x00007f19ae4cb8c0 &nbsp;0x00007f19ae5dec60 &nbsp;Yes (*) &nbsp; &nbsp; /lib/libc.so.6</div>


<div>0x00007f19ae830af0 &nbsp;0x00007f19ae849704 &nbsp;Yes (*) &nbsp; &nbsp; /lib64/ld-linux-x86-64.so.2</div><div>(*): Shared library is missing debugging information.</div></div><div><br></div><div><br></div><div>and if u want:</div><div>


<br>
</div><div><div>cat /proc/2282/maps&nbsp;</div><div><br></div><div>7f19ae82a000-7f19ae82b000 rw-p 0017d000 08:05 9922 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /lib/<a href="http://libc-2.11.1.so" target="_blank">libc-2.11.1.so</a></div><div>7f19ae830000-7f19ae850000 r-xp 00000000 08:05 8824 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /lib/<a href="http://ld-2.11.1.so" target="_blank">ld-2.11.1.so</a></div>



<div>7ffff2031000-7ffff2052000 rw-p 00000000 00:00 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[stack]</div>
<div>7ffff21af000-7ffff21b0000 r-xp 00000000 00:00 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[vdso]</div><div>ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[vsyscall]</div></div><div><br></div><div>noticed also that static analysis tools like &quot;objdump -d&quot; is generally avoided, if u want to understand dynamic addresses. &nbsp; From above, we can conclude that the &quot;sysenter&quot; (this is intel syntax, or &quot;syscall&quot;, in AMD syntax as used by gdb disassembly above) is used for the transition to the kernel - as embedded inside the libc.so.6.</div>

<div>
&nbsp;</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"><span><font color="#888888">
--<br>
regards,<br>
<br>
Mulyadi Santosa<br>
Freelance Linux trainer and consultant<br>
<br>
blog: <a href="http://the-hydra.blogspot.com" target="_blank">the-hydra.blogspot.com</a><br>
training: <a href="http://mulyaditraining.blogspot.com" target="_blank">mulyaditraining.blogspot.com</a><br>
</font></span></div><div><div><br><div class="im">
_______________________________________________<br>
Kernelnewbies mailing list<br>
<a href="mailto:Kernelnewbies@kernelnewbies.org" target="_blank">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>
</div></div></div></blockquote></div><span class="HOEnZb"><font color="#888888"><br><br clear="all"><div><br></div>-- <br>Regards,<br>Peter Teoh<br>
</font></span></div>
</blockquote></div><br>