跳到主要內容

Export DLL Symbols

終於可以開始 debug DLL project 了!

之前根據 Debugging DLL Projects 的設定,
設定好 debug property 的 caller 並且在 DLL project 裡面設定中斷點,
但是 caller 一被叫起來後,馬上就 exit code 1,
並沒有 hit 到在我在 DLL project 裡設定的中斷點.

原本以為可能是我設定的中斷點不是 entry point ,程式提早結束所以沒有 hit 到.
想一想拿 sample code build 出來的 DLL 去測試,發現 entry point 是對的,
DLL debug 的中斷點在 sample code project 裡面也可以正常的 hit 並且停止.

想了很久後再看一次 caller 的文件,發現可以提高 caller 的 debug level ,
所以可以驗證我的另一個猜測,看是不是我指定的 DLL 其實並沒有被載入?
結果 debug log 顯示, DLL 應該是有被正確載入.
但是為什麼 caller log 會一直顯示載入 entry point function 失敗呢?

突然想到,我的 DLL 真的有 export 該 function 嗎?
Dependency Walker 去分析我的 DLL ,
發現 x86 build 確實有 export function,但是 x64 build 卻是空白的?
這時候我開始想說,難道是 build configuration 有問題?
但是 x86 build 的 DLL caller 也是無法正確載入啊?
那先不管 x64 build 好了,感覺 x86 build 比較有機會突破阻礙.

那再來比較 x86 build export 的 function 和 sample code 的有什麼不一樣
仔細一看,原來是 function name 被 mangling 處理過,多了 "_" prefix.
設定好 DLL project 的 def 檔重 build 後, caller 果然可以載入成功並且 hit 中斷點.
而神奇的 x64 DLL export function 是空白的現象也恢復正常了!

原來要 build 一個 DLL 有這麼多眉角要注意,學到這些東西很開心 :)


留言

這個網誌中的熱門文章

3M UVA3000 更換濾芯紫外線燈匣

用了一年的3M濾水器提示說要換濾芯和燈匣 上 Youtube 想找教學的影片可是沒看到 UVA 3000 的 經過了一番奮戰後在這邊記錄一下 希望可以幫助後人,以免再重蹈覆轍。 Step 1. 拔掉插頭,把淨水器從牆上拿下來(基本上他是掛著而已),比較方便施工。 Step 2. 把前蓋往上拉,很容易就可以看到裡面的東西了。 Step 3. 打開後可以看到有兩個柱狀體,左邊的是燈匣,右邊的是濾芯。 Step 4. 這裡有個祕技是,這兩個柱狀體是可以往上 翻開30 度左右,這樣就可以有比較大的空間施工。 Step 4. 更換濾芯的話,柱狀體的瓶身上有箭頭,往左就是轉開,往右就是鎖緊。 Step 5. 更換燈匣的話比較麻煩一點,因為他底部是電源,頂部的右邊有個突出來的小方塊。對照淨水器上方連接處的話會有個弧形的凹槽,這是要 match 的.如果你只注意瓶身的箭頭往右鎖回去,就會造成漏水...Orz... Step 6. 把前蓋蓋回,機器掛回牆上,插插頭,開水,如果機器沒有告訴你有燈匣異常或漏水的話,就可以長按 C / UV  Reset 計數器了. 所以關鍵字就是,要往上翻 30 度,燈匣上面的小凸點要在右側,要看瓶身的 小箭頭. May it helps!

Getting start with Golang!

#Get started with Go https://talks.golang.org/2012/tutorial.slide#1 #Go for C programmers https://talks.golang.org/2012/goforc.slide#1 #Share Memory By Communicating https://blog.golang.org/share-memory-by-communicating #Codewalk: Share Memory By Communicating https://golang.org/doc/codewalk/sharemem/ #Go Concurrency Patterns: Timing out, moving on https://blog.golang.org/go-concurrency-patterns-timing-out-and #Go Language for Ops and Site Reliability Engineering https://talks.golang.org/2013/go-sreops.slide#1 #Go Dynamic Tools https://talks.golang.org/2015/dynamic-tools.slide#1 #Program your next server in Go https://talks.golang.org/2016/applicative.slide#1 #HTTP/2 Server Push https://blog.golang.org/h2push #gRPC Basics - Go http://www.grpc.io/docs/tutorials/basic/go.html #Go talks https://talks.golang.org/