Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Oct 2007 11:47:23 -0700
From:      Yuri <yuri@rawbw.com>
To:        Derek Ragona <derek@computinginnovations.com>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: Calling syscalls through int 0x80 documentation?
Message-ID:  <1192733243.4717aa3b1843f@webmail.rawbw.com>
In-Reply-To: <6.0.0.22.2.20071018132410.02311ad8@mail.computinginnovations.com>
References:  <1192731161.4717a21980065@webmail.rawbw.com> <6.0.0.22.2.20071018132410.02311ad8@mail.computinginnovations.com>

next in thread | previous in thread | raw e-mail | index | archive | help
> You can try here:
> http://www.ctyme.com/intr/int-80.htm
> 
Thanks Derek.
This site just says: parameters on stack.

So when following this I write the function 'mysyscall' (below) it doesn't work.
It should return 3 but returns 14.
And I am on i386.

So something is missing.

Yuri

--- code----
#include <fcntl.h>

extern int mysyscall (
          int syscall_no,
          int a1, int a2, int a3,
          int a4, int a5, int a6);

asm(
".text\n"
"mysyscall:\n"
"       push    28(%esp)\n"
"       push    24(%esp)\n"
"       push    20(%esp)\n"
"       push    16(%esp)\n"
"       push    12(%esp)\n"
"       push    8(%esp)\n"
"       push    4(%esp)\n"
"       int     $0x80\n"
"       pop     %ecx\n"
"       pop     %ecx\n"
"       pop     %ecx\n"
"       pop     %ecx\n"
"       pop     %ecx\n"
"       pop     %ecx\n"
"       pop     %ecx\n"
"       ret\n"
".previous\n"
);

main() {
  char *fname = "myxxxfile";
  //int fd = open(fname, O_WRONLY|O_CREAT);
  int fd = mysyscall(5/*open*/, (int)fname,O_WRONLY|O_CREAT,0,0,0,0); // open
  printf("fd=%i\n",fd);
}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1192733243.4717aa3b1843f>