[RFC]confusion about syscall

Peter Teoh htmldeveloper at gmail.com
Sat Jul 14 22:52:16 EDT 2012


int 80, i think, is hardly used nowadays:

http://wiki.osdev.org/System_Calls
http://articles.manugarg.com/systemcallinlinux2_6.html
http://semipublic.comp-arch.net/wiki/SYSENTER/SYSEXIT_vs._SYSCALL/SYSRET

and even for SYSENTER instruction, it will not be compiled into your
program, but exists inside some external libraries, unless u compile it as
static.

On Sun, Jul 15, 2012 at 10:28 AM, 王哲 <wangzhe5004 at gmail.com> wrote:

> Hi all:
>
>  i write two simple program to invoke syscall getpid.
>
> the first  program (getpid1.c) is as followed:
> #include <stdio.h>
> #include <unistd.h>
>
> int main(void)
> {
>     unsigned long value = 0;
>     __asm__("int $0x80":"=a"(value):"0"(20));
>     return 0;
> }
>
> and use objdump -d a.out disassembling it :
> ...
>  80483c2:    b8 14 00 00 00       mov    $0x14,%eax
>  80483c7:    89 c3                    mov    %eax,%ebx
>  80483c9:    89 d8                    mov    %ebx,%eax
>  80483cb:    cd 80                    int    $0x80
> ...
>
>
> and the second program:
>
> #include <stdio.h>
> #include <unistd.h>
>
> int main(void)
> {
>     unsigned long value = 0;
>     value = getpid();
>     return 0;
> }
>
> and disassembling it:( objdump -d a.out)
> ...
> 08048300 <getpid at plt>:
>  8048300:    ff 25 00 a0 04 08        jmp    *0x804a000
>  8048306:    68 00 00 00 00           push   $0x0
>  804830b:    e9 e0 ff ff ff           jmp    80482f0 <_init+0x3c>
> ...
> 080483e4 <main>:
>  80483e4:    55                                      push   %ebp
>  80483e5:    89 e5                                  mov    %esp,%ebp
>  80483e7:    83 e4 f0                              and    $0xfffffff0,%esp
>  80483ea:    83 ec 10                             sub    $0x10,%esp
>  80483ed:    c7 44 24 0c 00 00 00           movl   $0x0,0xc(%esp)
>  80483f4:    00
>  80483f5:    e8 06 ff ff ff                         call   8048300
> <getpid at plt>
>  80483fa:    89 44 24 0c                         mov    %eax,0xc(%esp)
>  80483fe:    b8 00 00 00 00                    mov    $0x0,%eax
> ...
>
> question:
>       why i can't find the "movl $0x14,%eax"  "int 0x80" in the second
> program after disassembling?
>
> any advice will be help!
> thanks in advance!
> wanny
>
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>
>


-- 
Regards,
Peter Teoh
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20120715/bd76014e/attachment.html 


More information about the Kernelnewbies mailing list