首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解读gcc新序

解读gcc新序
EN

Stack Overflow用户
提问于 2012-08-09 15:09:24
回答 1查看 1.4K关注 0票数 2

我想知道为什么gcc给函数引入了一个新的序言(以及结尾)--特别是main(),因为我只是对它进行了分析。例如,以前是:

代码语言:javascript
复制
push ebp
mov ebp, esp
sub esp, 0x... ; Allocate memory space into the stack

; ... Some code

; Epilogue
leave
ret

现在,这有点复杂(至少要理解):

代码语言:javascript
复制
lea    ecx,[esp+0x4]
and    esp,0xfffffff0
push   DWORD PTR [ecx-0x4]
push   ebp
mov    ebp,esp
push   ecx
sub    esp,0x64

; Some code

; Epilogue
add    esp,0x64
pop    ecx
pop    ebp
lea    esp,[ecx-0x4]
ret

我具体理解它是做什么的,但我不知道它的意图。它是为了使利用(堆栈溢出)尝试变得更加棘手吗?又一次电话会议?只是为了让堆栈更安全?(因为我在一场战争游戏中遇到了这些东西)

最后,我的gcc版本是: gcc版本4.3.2 (Debian 4.3.2-1.1)

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-09 15:12:18

其目的是在16字节边界上对齐堆栈.

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11886429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档