Calling syscalls through int 0x80 documentation?

Yuri yuri at rawbw.com
Thu Oct 18 11:47:25 PDT 2007


> 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);
}


More information about the freebsd-questions mailing list