Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 05 Mar 2004 18:43:11 -0500
From:      Chungwei Hsiung <skuma17@yahoo.com>
To:        Greg 'groggy' Lehey <grog@FreeBSD.org>
Cc:        Chungwei Hsiung <skuma17@yahoo.com>
Subject:   Re: Strange instructions in compiler output
Message-ID:  <4049108F.5080703@yahoo.com>
In-Reply-To: <20040305233209.GO67801@wantadilla.lemis.com>
References:  <4048CA38.6040203@yahoo.com> <20040305233209.GO67801@wantadilla.lemis.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Greg 'groggy' Lehey wrote:

>On Friday,  5 March 2004 at 13:43:04 -0500, Chungwei Hsiung wrote:
>  
>
>>Hello..
>>I am super new to this list, and I have a simple question that I don't
>>know why it does that. I have a simple test program. I compile it, and
>>gdb to disassemble main. I got the following..
>>
>>0x80481f8 <main>:       push   %ebp
>>0x80481f9 <main+1>:     mov    %esp,%ebp
>>0x80481fb <main+3>:     sub    $0x8,%esp
>>0x80481fe <main+6>:     and    $0xfffffff0,%esp
>>0x8048201 <main+9>:     mov    $0x0,%eax
>>0x8048206 <main+14>:    sub    %eax,%esp
>>0x8048208 <main+16>:    movl   $0x804a6ce,0xfffffff8(%ebp)
>>0x804820f <main+23>:    movl   $0x0,0xfffffffc(%ebp)
>>0x8048216 <main+30>:    sub    $0x4,%esp
>>0x8048219 <main+33>:    push   $0x0
>>0x804821b <main+35>:    lea    0xfffffff8(%ebp),%eax
>>0x804821e <main+38>:    push   %eax
>>0x804821f <main+39>:    pushl  0xfffffff8(%ebp)
>>0x8048222 <main+42>:    call   0x804823c <execve>
>>0x8048227 <main+47>:    add    $0x10,%esp
>>0x804822a <main+50>:    mov    $0x0,%eax
>>0x804822f <main+55>:    leave
>>0x8048230 <main+56>:    ret
>>
>>I don't know if at line 5, we move zero to %eax. why do we need to sub
>>%eax, %esp? why do we need to substract 0 from the stack pointer??
>>Any help is really appreciated.
>>    
>>
>
>This is probably because you didn't optimize the output.  You'd be
>surprised how many redundant instructions the compiler puts in under
>these circumstances.  Try optimizing and see what the code looks like.
>
>If this *was* done with optimization, let's see the source code.
>
>Greg
>--
>Note: I discard all HTML mail unseen.
>Finger grog@FreeBSD.org for PGP public key.
>See complete headers for address and phone numbers.
>  
>
Hello.. thank you very much for the reply
I actually don't know how to use the optimization. I just compile it 
with gcc 3.2.2, and use gdb to disassemble main to get this assembly. Is 
it possible I can get the non-redundent output?
here is the code I compile..

#include <stdio.h>
 
 
int main(void) {
  char *name[2];
  name[0] = "/bin/sh";
  name[1] = NULL;
  execve(name[0], name, NULL);
  return(0);
}

best regards
Chungwei



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