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>