Strange instructions in compiler output
Chungwei Hsiung
skuma17 at yahoo.com
Fri Mar 5 16:53:14 PST 2004
Greg 'groggy' Lehey wrote:
>On Friday, 5 March 2004 at 18:43:11 -0500, Chungwei Hsiung wrote:
>
>
>>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..
>>>>
>>>>0x8048201 <main+9>: mov $0x0,%eax
>>>>0x8048206 <main+14>: sub %eax,%esp
>>>>...
>>>>
>>>>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.
>>>
>>>
>>Hello.. thank you very much for the reply
>>I actually don't know how to use the optimization.
>>
>>
>
>Use the gcc command line options. See below.
>
>
>
>>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..
>>
>>...
>>
>>
>
>The best way to look at the assembly output is to generate it directly
>from the compiler. I get:
>
>$ cc -O -pipe -mcpu=pentiumpro -S exec.c
>$ cat exec.s
>.LC0:
> .string "/bin/sh"
>...
>main:
> pushl %ebp
> movl %esp, %ebp
> subl $24, %esp
> andl $-16, %esp
> movl $.LC0, -8(%ebp)
> leal -8(%ebp), %edx
> movl $0, 4(%edx)
> movl -8(%ebp), %eax
> movl %eax, (%esp)
> movl %edx, 4(%esp)
> movl $0, 8(%esp)
> call execve
> movl $0, %eax
> movl %ebp, %esp
> popl %ebp
> ret
>
>This doesn't look that much like your code. Without the -O (optimize)
>flag I get:
>
>$ cc -pipe -mcpu=pentiumpro -S exec.c
>$ cat exec.s
>...
>main:
> pushl %ebp
> movl %esp, %ebp
> subl $24, %esp
> andl $-16, %esp
> movl $0, %eax
> subl %eax, %esp
> movl $.LC0, -8(%ebp)
>
>So yes, it looks as if you're not optimizing.
>
>Greg
>--
>Note: I discard all HTML mail unseen.
>Finger grog at FreeBSD.org for PGP public key.
>See complete headers for address and phone numbers.
>
>
hello greg..
yes.. it does the difference..
thanks a lot for your help..
Chungwei
More information about the freebsd-hackers
mailing list