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>