PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
Fw: [问题] 呼叫gets前的sub $0xc,%esp
楼主:
GNUGCC
(-std=c++14)
2016-07-28 14:52:38
※ [本文转录自 ASM 看板 #1NcQiseh ]
作者: GNUGCC (-std=c++14) 看板: ASM
标题: [问题] 呼叫gets前的sub $0xc,%esp
时间: Thu Jul 28 14:50:28 2016
小弟最近在练习看组语,遇到问题想来请教各位
这是source code
#include <stdlib.h>
#include <stdio.h>
void print(){
char buf[5];
gets(buf);
}
int main(){
print();
}
这是在
ubuntu 16.04 amd64
用
gcc -fno-stack-protector -m32 -O0 test.c
编译出来的结果
0804840b <print>:
804840b: 55 push %ebp
804840c: 89 e5 mov %esp,%ebp
804840e: 83 ec 18 sub $0x18,%esp <=为啥预留24 bytes
8048411: 83 ec 0c sub $0xc,%esp <=为啥要减12
8048414: 8d 45 f3 lea -0xd(%ebp),%eax
8048417: 50 push %eax
8048418: e8 c3 fe ff ff call 80482e0 <[email protected]/*
楼主: GNUGCC (-std=c++14)
2016-07-28 14:55:00
因为和C稍微有关系,而且这边人比较多,所以转过来,请板主包容,谢谢!
作者: longlongint (华哥尔)
2016-07-28 14:57:00
1 配四的倍数 是为了配合硬件(?2 分配区域变量的空间根据记忆回的 我觉得你查一下书里面应该有写突然想到还有个传参数功能还有存ip忘了说还有一个功能是存ebp......
作者:
wtchen
(没有存在感的人)
2016-07-28 15:15:00
板工勉强放行,至少言之有物
作者: longlongint (华哥尔)
2016-07-28 15:31:00
我也不懂为什么要减16这个数字 XD
作者:
descent
(“雄辩是银,沉默是金”)
2016-07-28 15:33:00
q2:
http://goo.gl/vNJXig,
-mpreferred-stack-boundary
作者:
x000032001
(版废了该走了)
2016-07-28 20:47:00
应该是为了对齐16bytes
作者:
LPH66
(-6.2598534e+18f)
2016-07-28 23:10:00
原 PO 在问的就是为什么是 16 byte, 其原因就是那个选项
作者: longlongint (华哥尔)
2016-07-29 00:39:00
哇 学习了
作者:
Sidney0503
(Sidney0503)
2016-07-30 18:31:00
ID wwwwwwwwww
继续阅读
[问题] Armadillo 套用在Dev C++ 5.11 免安装版
ilove88th
Re: [问题] linked list插入的复杂度
schizophrena
[问题] 关于虚拟继承的观念。
Roy75117
[问题] 那里有好用的Deep learning C++ code?
popen
[问题] 老鼠走迷宫 终点未知情况
liane5566
[问题] linked list插入的复杂度
einna
Re: [问题] 右值引用的背后原理或如何达到的
littleshan
[问题] 一题面试遇到的问题
florenceL
[问题] 右值引用的背后原理或如何达到的
Clangpp
[问题] c++ macro简化static_cast?
grayStone
Links
booklink
Contact Us: admin [ a t ] ucptt.com