Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 2 Mar 2004 15:15:54 -0500
From:      ari <edelkind-freebsd-hackers@episec.com>
To:        Daniela <dgw@liwest.at>
Cc:        hackers@freebsd.org
Subject:   Re: Strange behaviour in assembly language program
Message-ID:  <20040302201554.GA50518@episec.com>
In-Reply-To: <200403022046.22882.dgw@liwest.at>
References:  <200403022046.22882.dgw@liwest.at>

next in thread | previous in thread | raw e-mail | index | archive | help
dgw@liwest.at said this stuff:

> Finally I came up with the simplest ASM program that reproduces the error.
> Here it is:
> 
> .text
> .global _start
> _start:
> 	pushl	$0
> 	movl	$1, %eax
> 	int	$0x80
> 
> I looked everywhere (Developer's handbook, Google, ...) to find the solution, 
> but all resources I consulted tell me this is the right way to do it.
> This program, however, always exits with 1 regardless of the value I push.

The kernel expects the interrupt to take place from within a function.
Try:

.text
.global _start
_start:
        pushl   $8
        movl    $1, %eax
        call    doint
doint:  int     $0x80

Or, if you really want the program as simple as possible, you can push
0, eax, garbage, anything onto the stack in place of the return address:

.text
.global _start
_start:
        pushl   $8
        pushl   $0
        movl    $1, %eax
        int     $0x80


ari



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