我有以下代码:
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
谢谢!
答案 0 :(得分:3)
这段代码显然已经过优化编译,这就是你看到奇怪的东西的原因。返回值将是{}
calculating
120
{'referTable': 120}
120
的第一个参数main
。
原始C代码可能看起来像:
argc