看板 PC_Shopping 關於我們 聯絡資訊
看了三天的 paper 終於看懂 Meltdown 怎麼做到的 Spectre 太複雜看不懂沒時間懶得看所以不談 首先我預設大家都知道 instruction-level paralleism 指令層級平行, superscalar 超純量, out-of-order execution 亂序執行, speculative execution 推測執行 他們之間的關聯為,為了達成 ILP 所以引入 superscalar。 但是資料相依性問題造成 superscalar 不能很好發揮,因此 引入 out-of-order execution 讓 CPU 挑鄰近的可以同時執 行的指令執行。再來 speculative execution 遇到條件分支 conditional branch 時先預測會進某個分支並執行。 除此之外還有 micro op,以下寫作 uop,則是把一個 instr- cution 拆成好幾個 uop 並把他丟下去跑。CPU 裡有好幾個不 同運算單元,包含算術運算、讀寫單元、分支單元,而且分別 都有複數分身可以同時執行。所以指令拆成 uop 以後先堆到 buffer 裡面,再丟到各個單元去跑。 把以上所有東西合起來就是,先解決資料相依性問題,挑幾個 鄰近的指令進來,拆成 uop,丟到 buffer,開始排程去跑, 並根據分支預測把可能的指令拿過來拆一拆一起下去跑。 接著 Meltdown 攻擊的問題點在於,當 user mode process 存取他不該存取的記憶體資料時,那個指令會產生一個例外 execption, 接著會產生一個中斷 interrupt 丟給 OS 去處理 這個例外。但因為以上幾個東西合在一起,其實指令的執行先 後順序是不一定的,有可能後面的跑一跑並且產生了一些副作 用,結果因為前面的指令產生例外,清空 buffer 與管線,雖 然暫存器 register 與記憶體都沒有寫入,理論上是當作沒發 生,可是卻有副作用發生了。這個副作用就是記憶體存取,會 先載入快取 cache。Layer 幾的快取其實不重要,因為重點是 它被載入快取中,所以存取時花費的時間一定比從記憶體存取 來的快。這個時間的差異就是洩漏出來的資訊。 考慮下面的指令 1 ; rcx = kernel address 2 ; rbx = probe array 3 retry: 4 mov al, byte [rcx] 5 shl rax, 0xc 6 jz retry 7 mov rbx, qword [rbx + rax] 在第四行會產生一個例外,但因為 OOOE 與推測執行,造成第 七行的讀取記憶體行為也執行了,它存取的資料被從記憶體中 搬入快取,但因為在第四行產生例外,因此 rbx 並沒有真的 被寫入資料。因為 rbx + rax 上的資料被移到快取了,它的 存取速度一定比其他在 probe array 裡的資料來的快,因此 只要掃一次整個 probe array 看看哪個資料存取速度比別的 快,再算出它與 probe array 起始位置的偏移量,就知道在 第四行中從 rcx 讀取到的 kernel data 是甚麼。 所以 KPTI 就是完全分離 kernel address 與 user address ,也就是 kernel space 的所有資料都不在 user space 中, 在 user space 讀資料都讀不到 kernel 資料,相對應的也不 會有例外產生。 --
eggimage:我之前也發生過很多次 yahoo本來就很爛 還外加奇摩12/10 18:52
madeinchina:之前即時通死都不讓我登入 後來我就改用MSN了...12/10 18:53
eggimage:發現MSN也不給你登....12/10 18:53
madeinchina: 就改登PTT了12/10 18:55
eggimage:最近ptt也一直斷....12/10 18:57
freely10469: 只好掀桌出去裸奔了...12/10 19:57
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.40.20 ※ 文章網址: https://www.ptt.cc/bbs/PC_Shopping/M.1515123762.A.27C.html
ivan761016 : 恩~跟我想的差不多 01/05 11:53
DsLove710 : 跟我想的一樣 01/05 11:53
Angrboda : 原來是這樣 01/05 11:55
henry46277 : 我很誠實的講 真的看不太懂 有文組的版本嗎? 01/05 11:58
總之就是一種側載攻擊 洪師傅, 不要跟他拼拳, 嘗試切他中路的概念
gg068187 : 趕快推才不會被發現看不懂 01/05 11:59
aeolus0829 : 看到組合語言就飄掉了... 囧> 01/05 11:59
Mankind69 : 我很認同,跟我看法一樣 01/05 12:01
qxxrbull : 微處理機概論、組合語言 頭好痛 01/05 12:02
Apache : 就本來要授權的東西 你老闆說先做再來問我比較省事 01/05 12:02
doom3 : 這是簡介Intel如何偷吃步嗎XD 01/05 12:04
ycc1227 : 我的答案跟你一樣 01/05 12:06
tongigun : 嗯嗯跟我想的一樣 01/05 12:08
StarHero : INTEL:我不是教你詐~ 01/05 12:09
DKPCOFGS : 有人看得懂可以翻譯一下嗎 01/05 12:09
iceyang : 所以前面推文說的關閉cache就好是真的? 01/05 12:12
s25g5d4 : 關不掉,那是硬體設計,而且真的拿掉快取那直接倒退 01/05 12:13
s25g5d4 : 半世紀 01/05 12:13
gekidou : 沒錯........完全看不懂 01/05 12:14
chrisdar : 不能關閉cache, 但是可以把cache清空 01/05 12:15
StarHero : 就像你去郵局存錢 正常流程 你要填單 然後把存款單+ 01/05 12:16
chrisdar : 甚麼時候清空就是重點了, 清空cache帶來效能拖累 01/05 12:16
nn3356 : 看到組合語言就豆頁痛 01/05 12:16
StarHero : 錢+存款簿 送入櫃台 這樣~ 可是櫃台想加快速度 01/05 12:17
Shauter : 關掉快取? 這 你的CPU效能要回到20年之前吧 01/05 12:17
StarHero : 先拿你的存簿去打好 才收錢跟存單 01/05 12:19
StarHero : 這時候就產生問題了...不給錢然後存簿又打好給你了~ 01/05 12:20
jinshun : INTEL -20% 01/05 12:21
xxtomnyxx : 簡單的說就是 Intel 的 CPU 為了加快速度,會偷跑 01/05 12:23
xxtomnyxx : 後面的指令,所以當發現前面的指令有例外存取時,雖 01/05 12:23
xxtomnyxx : 然會清空後面偷跑的指令搬到快取的資料,但在搬到快 01/05 12:24
xxtomnyxx : 取到清空的這段期間就可能被其他惡意程序趁機存取到 01/05 12:25
xxtomnyxx : 這個高層級的資料。 01/05 12:25
vash0319 : 嗯 跟我想的一樣......果然看不懂 01/05 12:26
kuma660224 : 只有intel愛搶快偷吃步。 01/05 12:26
iip06112 : 看不懂shl這行的意思 可以讀出kernel data嗎 01/05 12:26
就是讓 rax 的值乘以 4096, 以對齊 page size
orze04 : 看程式碼反而比較好懂 囧 01/05 12:26
xxtomnyxx : 呃....應該說,因為資料還是有搬到快取留下的足跡, 01/05 12:27
xxtomnyxx : 所以可以去查閱那筆資料 01/05 12:27
kira925 : 不是只有Intel偷吃步 而是Intel偷得步比較多 01/05 12:28
kira925 : 不管Meltdown還是Spectre都是抓這種行為 01/05 12:29
kira925 : 只是Intel偷得更兇 所以額外有Meltdown 01/05 12:29
xxtomnyxx : shl 是把暫存器資料往高位元偏移的指令 01/05 12:29
orze04 : rax rbx那些是暫存器 01/05 12:29
KotoriCute : 這些步驟現代高性能都有實作,所以Spectre每家都中 01/05 12:32
xxtomnyxx : 我確認一下,rax 和 rbx 是 x64 的暫存器寫法吧? 01/05 12:32
x86 一個 word 是 16 bits al 代表 lower-byte, ah 代表 upper-byte ax 代表整個 word (2 bytes) eax 代表兩個 word (4 bytes) rax 代表四個 word (8 bytes = 64 bits)
Tsai07 : 原來如此,寫的真是淺顯易懂 01/05 12:32
linph : 淺顯易懂推 01/05 12:32
xxtomnyxx : 我學的組合語言是 x86 的,沒印象有 rax、rbx 這個 01/05 12:32
KotoriCute : 但Intel的實作方式比其他人更激進,所以Meltdown只 01/05 12:32
s08glen : 資工系菜比八表示欣慰,這學期學的課程讓我看得懂 01/05 12:32
KotoriCute : Intel有 01/05 12:32
qxxrbull : 偷的步多和少是哪邊的差別? 01/05 12:33
Bencrie : rax rbx 就 64bits 的 eax ebx 01/05 12:34
xxtomnyxx : 我猜是處理例外中斷和處理偷吃步程序的優先順序? 01/05 12:35
saito2190 : 看得懂推 01/05 12:36
Litfal : 這些激進的廢掉,或是另外加防禦,會不會把原本領先 01/05 12:38
Litfal : 的IPC吐回去阿... 01/05 12:38
kuma660224 : 改硬體,不會像軟體補丁損失這麼大 01/05 12:39
kuma660224 : RYZEN沒有激進到Meldown,效能也不弱 01/05 12:40
jk01 : 從旁側擊的蓋念 01/05 12:41
KotoriCute : Google和Amazon說更新Fix後沒有明顯性能下降,大家 01/05 12:41
KotoriCute : 可以回家啦 01/05 12:41
kuma660224 : Spectre看起來風險小到可忽略。各家都中但不一定要 01/05 12:41
kuma660224 : 改 01/05 12:41
KotoriCute : Spectre 不是可以忽略,而是要補了話難度更大 01/05 12:43
Cubelia : 專業 01/05 12:43
cabin2501 : 好猛 看不懂但是有一個結論:以後買AMD 01/05 12:43
iip06112 : 請問為什麼算出偏移量就能知道kernel data 另外 rax 01/05 12:43
iip06112 : +rbx附近(那個block)的資料也會一併被搬到快取中吧 01/05 12:43
iip06112 : ? 01/05 12:43
第四行中從 rcx 中的位址讀入資料 = 84 好了 先把 84 * 4096 來對齊 4K page size 接著讀取 rbx + 84*4096 的資料 此時整個 page 會被載入 cache 中 (4096 byte) probe_array 要對齊 4K page size,它的起始位置要在 page 開頭 接著每 4K 資料就又是另一個 page 從頭掃一次 probe_array 看看到哪個 page 速度最快 因為第 84 個 page 在上面說的,被載入到 cache 中 所以掃到第 84 個 page 的時候明顯比其他 page 快 這樣就算出偏移量 = 84, 所以 rcx 中的位址的資料就等於 84
KotoriCute : 要解決Spectre,OS和軟體這兩個都要更新 01/05 12:44
KotoriCute : 處理起來比Meltdown更麻煩 01/05 12:45
kuma660224 : Spectre is harder for hackers to take advantage 01/05 12:45
kuma660224 : of 01/05 12:45
kuma660224 : but is also harder to fix 01/05 12:45
kuma660224 : 就是S很難真正出問題,但難靠軟體解決風險。 01/05 12:46
KotoriCute : Google 測試沒有說 Spectre 可以忽略不管 01/05 12:46
iceyang : 有沒有人能舉個例子 平時上網駭客如何主動透過這漏 01/05 12:47
iceyang : 洞攻擊並竊取我們本地端的資料 01/05 12:47
KotoriCute : 不過 Meltdown 是"馬上""立刻"要解決的問題 01/05 12:47
kuma660224 : 理論上當然不能不管,但短期也不會出啥問題 01/05 12:47
kuma660224 : Meltdown才是馬上嚴重要立即解決 01/05 12:48
KotoriCute : 現在雲端廠已經出來說,更新Meltdown fix 沒有明顯 01/05 12:48
KotoriCute : 性能下降了 01/05 12:48
KotoriCute : 要期待Intel 在Server領域崩盤,看來可能性不大了 01/05 12:49
MrDisgrace : 難道要承認效能變慢 買時間的客戶不出來靠北退費 01/05 12:52
kira925 : 這幾天Phoronix的更新測試是大概差3~5%拉 01/05 12:52
kira925 : 至於廠商會不會講有差 講有差他要被狗幹當然說沒 01/05 12:52
Lansbury : 笑了 解決方案的廠商怎麼敢將自己方案有問題 01/05 12:53
ChangWufei : 表面河蟹 私下I皇不知道要割多少肉解決 01/05 12:55
kuma660224 : 實測若3-5%已蠻嚴重。接近一年份的牙膏。 01/05 12:55
kuma660224 : 不過哪家廠商敢出面說嚴重,得罪i皇不是小事 01/05 12:56
hl4 : probe array是直接對應cache 的位址嗎 01/05 12:58
不是... 隨便找個地方塞一個很大的 array 而已 但一定要跟 page 對齊
BusterWu : 嗯嗯 這篇文章是用中文嗎 我怎麼看不懂 01/05 12:58
JoyRex : Ryzen真的要飛天了,就算拉到5G打個20%也沒啥優勢 01/05 13:00
orze04 : al是rax裡的一段 shift rax也會等量shift al 01/05 13:00
arrenwu : 如果差5% 其實是還好啦XD 01/05 13:01
cka : 完了我看不懂 01/05 13:01
※ 編輯: s25g5d4 (36.227.40.20), 01/05/2018 13:04:02
friedpig : Azure也是炒翻天的時候就出來澄清沒事了 少部分 01/05 13:03
friedpig : 用戶網路會有點影響 但是有我們好棒棒的免費網路 01/05 13:03
friedpig : 加速服務可以幫你把影響抵銷甚至更快喔 01/05 13:04
hakugetsu : 我有個朋友在Azure的機器被reboot之後掛掉惹..QQ 01/05 13:05
ariadne : 現在進入上下交相賊的狀況 喬好表面就雲淡風輕 01/05 13:06
DANTEINFERNO: 真der 5%也不過差一個世代 還好8代多了2核 像7代只 01/05 13:06
DANTEINFERNO: 能當6代用 幫QQ 01/05 13:06
ariadne : 看新的採購案AMD數量變化就知道真假 01/05 13:06
friedpig : Azure還沒正式上更新吧 表定是1/10 01/05 13:07
GJME : azure的機器好像昨天會被強制重開 昨天有看到災情QQ 01/05 13:08
MrDisgrace : 搞不好折扣給很大下次還是買IntelXD 01/05 13:08
ken720331 : 下次買打5折 01/05 13:08
friedpig : 好像有這件事 沒寫Script的機器服務斷掉了 01/05 13:09
Marxing : 恩恩 跟我想的一樣 01/05 13:12
jones2011 : 等等看intel的cpu 9代相對8代的性能提升...大致上 01/05 13:12
jones2011 : 能當作被調降性能的最大值>.0 01/05 13:12
MrDisgrace : 會這麼快解嗎?P4都能賣了有什麼賣不動XD 01/05 13:14
friedpig : 沒注意到今天有多發一封信 還真的緊急提早patch了 01/05 13:15
NCKU : 看到組語 直接end 01/05 13:17
n19605gh : 未看留言就知道會有跟我想的一樣 01/05 13:19
tontonplus : 跟我預想的差不多耶 01/05 13:19
Shauter : 9代硬體會修嗎? 這應該不是步進就能修好的 01/05 13:19
Shauter : 應該10代才會修好整個分支預測喔 9代我猜是遮蔽? 01/05 13:20
show95175300: 恩 跟我想的一樣 01/05 13:22
pig : 雲端業者是在賣計算力的,當然要先喊影響不大啦 01/05 13:26
eternal3326 : 我也這麼覺得 01/05 13:28
EAFV : 新聞報那麼大 不趕快更新到時候就真的有攻擊災情了 01/05 13:32
Ekmund : 推理解 01/05 13:39
NDSLite : 不更新會被竊取密碼嗎 01/05 13:39
oil01 : 等有人被攻擊產生損失就崩潰了 01/05 13:44
chenszhanx : 不更新winrar密碼會被繞過去 01/05 13:44
wei115 : 不太懂,為什麼知道資料是否放在快取裡就能知道資料 01/05 13:45
wei115 : ? 01/05 13:46
jeff40108 : 因為他有refrence要偷的資料的其中一個bit 01/05 13:47
JoyRex : ATM密碼通通被安德烈搞定 01/05 13:48
larailing : 家裡門不關小偷會上門嗎 跟 小偷根本不會來妳家偷 01/05 13:49
jaid : Speculative Execution/OOOE是現代高效能處理器必備 01/05 14:01
jaid : 並不是只有Intel這樣搞,只是Intel權限檢查沒弄好 01/05 14:01
tactical : 快推,但我還是看不懂 01/05 14:06
aegis43210 : 影響至少5%,牙膏說用戶會習慣的 01/05 14:07
kobe8112 : wiki英文解釋的也算淺顯吧,可以再搭配著看 01/05 14:08
ericinttu : 會習慣謊言的 01/05 14:08
karen71014 : 先推才不會被發現看不懂 01/05 14:12
tactical : 這個會影響CHROME瀏覽器下GOOGLE帳號被盜用嗎?? 01/05 14:24
giraffe4527 : 推解釋很清楚 看完這篇終於可以理解問題在哪了 01/05 14:32
giraffe4527 : 是說銀行金融機密機關伺服器要先擔心吧 01/05 14:34
CactusFlower: 你484偷看我ㄉ筆記本 跟我想的差不多 01/05 14:35
JoeyChen : wow 偷看筆記本? 可以簡化成這個概念嗎 XD 01/05 14:39
william1978a: 大家都是一般使用者影響不大 可是何謂一般使用者@@ 01/05 14:45
william1978a: 影片剪輯跟開實況算嗎? 01/05 14:45
soarling : 嗯嗯 我想的…看不懂 給推 01/05 14:46
felaray : 公有雲只是提供運算資源給租用戶,不是直接租用機器, 01/05 14:50
felaray : 效能應該不會有影響吧? 01/05 14:50
oil01 : 公有雲不影響....那他幹嘛買那麼多好設備買i3就好 01/05 15:04
oil01 : 啦 01/05 15:04
winiel559 : 白算盤唸完半本 還算看得懂 呼 01/05 15:07
jasonkey123 : 大陸人都用鍵盤側錄程式,強多了.... 01/05 15:08
iip06112 : 好像懂了感謝耐心解釋 所以是第四行在讀出資料且還 01/05 15:17
iip06112 : 沒造成exception的時候就已經把讀出的資料forwordin 01/05 15:17
iip06112 : g給後面的幾行指令了是嗎 那是不是把exception的步 01/05 15:17
iip06112 : 驟提前的話就能解決啊 01/05 15:17
s25g5d4 : 問題在 memory fetch 的時候就該擋下來 01/05 15:18
abdgmnzc : 理組:找原po可能講錯的地方 文組:果然跟我想的一 01/05 15:18
abdgmnzc : 樣 01/05 15:18
s25g5d4 : 那我肯定是文組的 QQ 01/05 15:20
felaray : 我是說公有雲的租用戶不影響,提供商當然影響到慘了 01/05 15:38
felaray : 阿...白白損失這麼多運算能力 01/05 15:38
AMD640 : 終於要飛天啦 01/05 15:40
Jokering5566: 可以翻譯成文組看得懂的嗎 01/05 15:47
RIFF : 01/05 15:47
reaturn : 完全看不懂 01/05 15:49
canblow : 恩恩 跟我想得一模一樣 01/05 15:53
user1120 : 推 01/05 15:57
willion003 : 我坦誠我看完大概還是不懂… 01/05 15:57
commandoEX : 這樣說的話有亂數執行的CPU應該都有問題? 01/05 16:07
sdbb : 樓上說的對,所以intel也拼命拖AMD下水 01/05 16:18
twlin : 這個跟亂序執行沒有關係,是因為intel在執行前沒有 01/05 16:23
twlin : 檢查權限,乖乖跟AMD一樣先檢查再執行就沒事 01/05 16:24
winiel559 : 請問跟亂序執行沒關係 就只是pipeline的問題嗎 01/05 16:26
跟 pipeline 也沒關係,跟亂序執行算有關系但不是亂序執行的鍋 從 rcx (kernel address) 讀資料,再把讀出來的資料乘以 4096 (shift 12), 再去存取 rbx + 上面算出來的值,三個步驟是有相依性的 首先因為預測執行的關係這個分支的指令被認為可以先試著執行 注意指令被抓進來後會拆成 uop 才排到 reorder buffer 裡 指令被拆成 uop 後,亂序執行允許來自不同指令的 uop 不照順序執行 但是因為上述幾個步驟有相依性,還是要照步驟一二三執行 正常的設計是第一步存取記憶體時就該停下來,但 Intel 設計是先跑完再檢查 所以造成上面三個步驟都跑完了(或至少跑了部分),產生一些副作用 最後 uop 執行完,還是要照指令順序把結果依序寫到該寫入的地方 這一步稱為 instruction retirement,Intel 在 retire 階段才檢查權限 因此雖然不該寫入的東西確實沒被寫進暫存器,但它還是有執行讀取的動作 而且不只讀取了不該讀取的東西,還讓它繼續運算下去(第二、三步驟) 造成在第三步驟的時候 probe array 裡有資料被移到快取中 只要找到是哪一個資料,就能推敲出那個不該讀取的資料是甚麼 注意我上面稱為步驟是因為每個步驟其實可能不只一個 uop。
Windcws9Z : 亂序執行是會有Spectre漏洞 01/05 16:34
Windcws9Z : 不是Meltdown 01/05 16:35
kipi91718 : 這樣讓文組看懂很難吧 讀CS的也需要融會貫通才懂 01/05 16:44
pilitiger : 趕緊推文! 01/05 16:45
※ 編輯: s25g5d4 (36.227.40.20), 01/05/2018 16:46:48
HarryCheng : 詳細推 01/05 17:13
kji590929 : 嗯嗯 我也是這麼覺得 01/05 17:42
ken841520 : 這時候就要感謝我唸的大學CS把組語列為必修科目了 01/05 17:45
ken841520 : 總之就是Intel sucks! 01/05 17:47
michelin4x4 : 又看到ASM 頭會痛痛 01/05 17:47
ken841520 : 十年來一直讓使用者暴露在高危險環境中,被抓包 01/05 17:49
ken841520 : 還想拖其他人一起下水 01/05 17:49
attis : 嗯 所有iOS及Mac全部都會受到meltdown和spectre影 01/05 19:26
attis : 響 GG 01/05 19:26
smartree : 看不懂啦 XDDD 01/05 20:03
doom3 : 考資工研究所的 這題必考 (誤 01/05 20:16
ericinttu : 時事必考題啊 (真的 01/05 20:27
ctes940008 : 推 01/05 21:19
hizerg : 推 01/05 21:52
biarg : 每個字分開看,我看的懂 01/05 22:12
APC : 我看懂啦~就是牙膏工廠出包啦~XD (誤) 01/06 00:48
ChangWufei : 99推 01/06 00:53
IHD : 爆 01/06 01:08
madstorm : 恩 01/06 01:49
plokm1221 : 我早說了 跟我想的差不多 01/06 09:18
kevin811221 : ok 01/06 12:47
versailles94: 很好,這寫的很棒老師給你100分 01/06 13:56
az7061780617: 推大大 01/07 03:52
goldflower : 好文推個 01/11 03:13
kugwa : 幹 我真的後悔當初計結沒有認真學 看超久終於有點懂 01/12 01:11
kugwa : 偷讀到的kernel資料 最終頂多只能留在cache 01/12 01:18
kugwa : 那麼要如何利用這個副作用 解析出那個資料呢 01/12 01:19
kugwa : 他的辦法就是 把資料直接當成偏移 試著讀取某個大陣 01/12 01:22
kugwa : 列的該偏移處 01/12 01:22
kugwa : 這樣做的話 在一切偷跑的行為都被撤銷之後 01/12 01:25
kugwa : 那個大陣列的該偏移處的資料仍然留在cache 01/12 01:26
kugwa : 大陣列裡的資料是啥不重要 重點是我們想知道那個偏 01/12 01:27
kugwa : 移是多少 01/12 01:27
kugwa : 為了做到這點 只要掃過大陣列 看讀到哪個偏移的時候 01/12 01:28
kugwa : 讀最快 就知道那個偏移是多少了 01/12 01:29
kugwa : 真的是神技耶 01/12 01:29
kugwa : 想到這種東西的人 不是天才 就是整天胡思亂想吧XD 01/12 01:30
kugwa : 然後我一直以為寫OS的人只要會讀ISA的手冊就好 01/12 01:40
kugwa : 不太需要管微架構運作的細節 01/12 01:40
kugwa : 現在感覺最好也要懂 01/12 01:41
Luos : 我的理解有點像async 總之偷跑造成順序不對 01/17 11:58
sarsman : 台大真的考出來了xdd 朝聖 02/06 12:19
leoone : 朝聖一下 幸好當初有follow到這篇 02/06 12:29
stacy62123 : 嗚嗚 考完才知道這篇 02/06 12:47
ap954212 : 謝謝原po讓我多二十分 02/06 13:19
winiel559 : 台大考了38分 02/06 14:40
nova06091 : 朝聖 02/06 16:54
s25g5d4 : 有考上要請客啊 02/14 00:57
winiel559 : 正取惹,感謝大i皇賜我吃穿 03/13 12:44
cow5566bad : 神文二讀,花30分鐘看,計系72上台大 08/24 14:09
v86861062: 推推180.217.130.131 07/27 12:45