覺得很有趣,故記錄一下解題思路
同事在 build code 時,發現一個 link error
正在產生程式碼 已完成程式碼產生 UefiApplicationEntryPoint.lib(ApplicationEntryPoint.obj) : error LNK2001: 無法解析的外部符號 __chkstk
網路查了一下,是因為 VC compiler 檢查到某些 function 有 stack 問題時
便會在 code 中插入 __chkstk 這個 check function
網路看到的解法都是放大 stack size
可以在 INF 檔案編譯選項中加入 /GsXXXXX
但據實測的結果是一點用處都沒有
stack size 還是維持在 32K 左右
後來試著在 INF 檔案編譯選項中加入 /FAcs 選項
此選項會產生 assembly 檔案
副檔名為 .cod
用 grep 搜尋 __chkstk 關鍵字
便可以看到是那個 function 被插入了 __chkstk
底下是我模擬的結果
很明顯的看到 rsp register 被保留了 32776 這麼大的空間(char LocalVar[32768])
當然會造成 stack overflow
沒有留言:
張貼留言