Help with understanding a very basic main() disassembly in GDB

后端 未结 4 919
闹比i
闹比i 2021-02-02 00:48

Heyo,

I have written this very basic main function to experiment with disassembly and also to see and hopefully understand what is going on at the lower level:



        
4条回答
  •  北海茫月
    2021-02-02 00:51

    Regarding your first question (where are stored the command line arguments), arguments to functions are right before ebp. I must say, your "real" main begins at < main + 10 >, where it pushes ebp and moves esp to ebp. I think that gcc messes everything up with all that leas just to replace the usual operations (addictions and subtractions) on esp before and after functions call. Usually a routine looks like this (simple function I did as an example):

       0x080483b4 <+0>:     push   %ebp     
       0x080483b5 <+1>:     mov    %esp,%ebp
       0x080483b7 <+3>:     sub    $0x10,%esp            # room for local variables
       0x080483ba <+6>:     mov    0xc(%ebp),%eax        # get arg2
       0x080483bd <+9>:     mov    0x8(%ebp),%edx        # and arg1
       0x080483c0 <+12>:    lea    (%edx,%eax,1),%eax    # just add them
       0x080483c3 <+15>:    mov    %eax,-0x4(%ebp)       # store in local var
       0x080483c6 <+18>:    mov    -0x4(%ebp),%eax       # and return the sum
       0x080483c9 <+21>:    leave
       0x080483ca <+22>:    ret 
    

    Perhaps you've enabled some optimizations, which could make the code trickier. Finally yes, the return value is stored in eax. Your interpretation is quite correct anyway.

提交回复
热议问题