→ ucrxzero: 有組語版嗎? 10/23 01:54
→ ucrxzero: 另外我想問為何eax會是0~ 10/23 01:55
※ 編輯: ucrxzero (43.248.19.192 臺灣), 10/23/2020 01:57:45
→ firejox: 組語板 asm 10/23 02:11
→ ucrxzero: 發在這也可以吧 10/23 02:12
→ ucrxzero: 我要問位址的問題而已 10/23 02:12
→ ucrxzero: 感謝提供 10/23 02:12
→ ucrxzero: 想到台大電機這題剛好請神人解釋 10/23 02:19
→ ucrxzero: 904.html 10/23 02:19
推 KaryuuIssen: 順序是未定義的 怎麼長都可以 我記得緩衝區防護 10/23 03:22
→ KaryuuIssen: 好像有影響 你編譯加個 -fno-stack-protector 試試 10/23 03:22
加了就往下長欸好神奇喔
推 LPH66: 然後 %eax 設為 0 就是你的 return 0 10/23 04:22
→ Lipraxde: 怎麼 return value 可以參考 System V ABI 裡的 Parame 10/23 06:58
→ Lipraxde: ter Passing,不同的 return type 有不同的傳法,屬於 10/23 06:58
→ Lipraxde: integer 的是用 rax、rdx return 10/23 06:58
※ 編輯: ucrxzero (43.248.19.192 臺灣), 10/23/2020 09:15:28
→ ucrxzero: 感謝大大 10/23 09:26
→ ucrxzero: 所以結論是往上往下都可 heap是只能往上 10/23 09:45
→ ucrxzero: 回傳值是給eax用的這樣嗎 10/23 09:45
→ ucrxzero: 不過直觀感覺往上長才會溢位需要保護 反而要保護往下長 10/23 09:46
→ ucrxzero: 我看來要多看書 10/23 09:47
→ Lipraxde: 應該是要看進出 function 時 stack pointer 的變化,st 10/23 11:49
→ Lipraxde: ack 應該還是往下長的 10/23 11:49
→ ucrxzero: CSAPP上說return address是%rbp+4原來是eax 10/23 11:54
→ ucrxzero: 感謝大大 10/23 11:54
推 LPH66: 呃, 不對; eax 和 return address 是不同的東西 10/23 14:06
→ LPH66: eax 是回傳的值, return address 是回去的程式位址 10/23 14:07
→ LPH66: 硬要說的話後者是 return 0 的 return, 前者是 0 10/23 14:07
→ ucrxzero: 這篇真多寶藏 10/23 19:40
推 b0920075: 往上往下通常用在記憶體空間的擴增方向不太會用在區域 10/23 21:50
→ b0920075: 變數的賦值順序... 10/23 21:50
→ ucrxzero: 我想也是 10/23 23:27
→ ucrxzero: heap 是用best fit 用過的可能還會釋放或GC後重新分配 10/23 23:28
→ ucrxzero: 不一定只會往上 10/23 23:28
→ sarafciel: 你看movl塞的offset都是負的 所以stack是往低位長 10/24 21:06
→ sarafciel: 至於stack frame裡面要怎麼塞區域變數就是看編譯器高興 10/24 21:08
→ ucrxzero: 我看這兩天把CSAPP的procedure call看完 10/25 02:53
推 Killercat: 雖然說這個並沒有定義,但是大多數作業系統實作上是一 10/27 15:05
→ Killercat: 多半使用類似的做法,可以參考這個網址 10/27 15:06
→ Killercat: Linux來講直到2.16都是這樣,所以stack/heap喜相逢會 10/27 15:06
→ Killercat: 碰到一些問題,不過後來有稍微做了些改變 10/27 15:06
→ Killercat: 不過雖然stack是往下長,但是是先切出一塊指定大小空間 10/27 15:08
→ Killercat: 再把指標訂到底部,所以pointer的operation++還是可以 10/27 15:08
→ Killercat: 正常的做iteration,這是後話... 10/27 15:08
→ ucrxzero: 樓上強強強 10/29 00:26
→ ucrxzero: 不過stack跟heap中間應該還有共享庫段才對? 10/29 03:29
→ Killercat: er...不是強,我想這邊大多數人應該認為這個模型是常識 10/29 14:37
→ Killercat: 所以沒有特別提出來而已.... 10/29 14:37
→ Killercat: 只是我突然發現這個模型似乎就是你卡住的點 10/29 14:38
→ ucrxzero: 可是那題台大電機我看大家都沒有講對說 10/29 14:55
→ ucrxzero: 才想說順便來發文 10/29 14:55
→ Lipraxde: 沒人講對?我看那篇 47 樓的 b 大明明寫了「stack是往 10/29 18:12
→ Lipraxde: 下長,但local變數擺放順序C語言規格書沒有強制規定」 10/29 18:12
→ ucrxzero: 喔我演殘 10/29 18:43
→ ucrxzero: *眼 10/29 18:43
→ ucrxzero: 補充一下因為我翻CSAPP的時候他直接這樣舉例我才誤會 10/30 18:29
→ ucrxzero: 有兩點 這本不是新手看 或是我太爛 10/30 18:29
CSAPP 3.12 完美解決這個疑問了QQ
※ 編輯: ucrxzero (43.248.19.192 臺灣), 10/31/2020 23:46:10