2013-10-04 102 views
2

我在windows上使用MinGW gcc構建了一個dll。我使用.def指定的導出函數並生成.lib導入庫。然後我使用strip.exe去掉符號表。我試過objdump,它打印出空的符號表。但是當我使用strings.exe時,它仍然可以打印一堆函數和類名。這是一個問題嗎?其他人能夠根據dll的名稱查詢功能嗎?去掉dll中的符號

回答

1

所有剝離對dll的作用是刪除調試符號。它不會從dll中刪除函數。換句話說,如果有人導入你的dll或者使用它,他們只能訪問你輸出的任何東西。如果你不希望他們能夠訪問它,只需不導出它。

此外,當您執行發佈版本時,如果啓用了-s選項,它應該將其去掉。

3

閱讀PE,它有地址和名稱表。如果你清理名稱表,沒有過程就可以通過名字,只有地址找到導出的函數,這是通過連接器完成的,而不是動態: http://msdn.microsoft.com/en-us/magazine/cc301808.aspx

enter image description here

有很多種方法,以確保出口函數來自DLL,但他們都發布了漏洞。如果您確實想要保護您的功能 - 在所有導出的功能上創建自定義調用約定或簽名驗證。