理解程序集返回main

时间:2016-02-26 21:19:34

标签: assembly att

我有以下代码:

0x401050    <main>:         push   %ebp
0x401051    <main+1>:       mov    %esp,%ebp
0x401053    <main+3>:       sub    $0x8,%esp
0x401056    <main+6>:       and    $0xfffffff0,%esp
0x401059    <main+9>:       mov    $0x0,%eax
0x40105e    <main+14>:      mov    %eax,0xfffffffc(%ebp)
0x401061    <main+17>:      mov    0xfffffffc(%ebp),%eax
0x401064    <main+20>:      call   0x4013a0 <_alloca>
0x401069    <main+25>:      call   0x401430 <__main>
0x40106e    <main+30>:      mov    $0x0,%edx
0x401073    <main+35>:      add    0x8(%ebp),%edx
0x401076    <main+38>:      mov    %edx,%eax
0x401078    <main+40>:      leave  
0x401079    <main+41>:      ret  

我正在尝试了解main(register eax)返回的值。 我真的不明白在0中存储0xfffffffc(%ebp)然后再回到eax的目的是什么:

0x40105e    <main+14>:      mov    %eax,0xfffffffc(%ebp)
0x401061    <main+17>:      mov    0xfffffffc(%ebp),%eax

以及0x8(%ebp)中的内容,以及将其添加到eax

之后的情况
0x401073    <main+35>:      add    0x8(%ebp),%edx

谢谢!

1 个答案:

答案 0 :(得分:3)

这段代码显然已经过优化编译,这就是你看到奇怪的东西的原因。返回值将是{} calculating 120 {'referTable': 120} 120 的第一个参数main。 原始C代码可能看起来像:

argc