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