2013-03-12 114 views
4

我有一個MS C/C++靜態聯動釋放EXE(上沒有調試信息),即不出口任何符號,而是用十六進制查看器我看到像爲什麼在exe文件中找到名稱不正確的名稱?

[email protected]@ 
[email protected]@@ 
[email protected]@@ 
[email protected]@@@@ 

事情瀏覽時當然,它們是由內部C++模塊提供的特定類/成員的重名。

他們爲什麼呢?如何避免暴露他們?

+2

大多數很可能RTTI數據。 – 2013-03-12 11:27:02

+0

他們沒有的dynamic_cast <>也沒有任何使用typeid操作符... 是否有泄漏防止這個信息到一個exe的任何方式??? – Pat 2013-03-12 11:34:01

+0

你確定你沒有出口?也許你正在鏈接的靜態庫正在導出。也許有人正在使用'__declspec(dllexport)'指令或編譯指示。要檢查您是否正在導出,請使用提供的exe工具。 – Ben 2013-03-12 11:54:47

回答

1

就個人而言,我不認爲有任何理由過分隱藏這個數據,因爲它沒有提供線索的人誰查看如何利用這些符號做一些「壞」。但是,如果這對你來說真的是一個巨大的問題,即你害怕某種反向工程,那麼你可能會選擇編碼混淆。例如,Semantic Designs提供用於這些目的的產品並聲稱它具有高質量。我從來沒有機會親自嘗試這些東西。請記住它是商業的。

+0

當然,我的問題與安全有關,當然混淆器不能解決問題。如果我明確地希望保持沉默,它真的讓我感到一種編譯器「功能」(它永遠是這樣)暴露我的名字。我的理解即TYPEID肯定需要一個名字,但在這種情況下,我想有我自己把它給我什麼都想要的選項(甚至一個空字符串) – Pat 2013-03-17 15:42:09

+0

我可以問爲什麼困惑沒有解決問題了嗎?它被設計來解決類似你的問題。 – 2013-03-17 15:44:10

+0

因爲我不想爲我的項目添加額外的複雜層來掩蓋微軟的「錯誤」。當你必須提供源代碼並且你不希望源代碼被理解時,混淆是可以的。在這裏,我們正在談論一個編譯了一個非常昂貴的編譯器/鏈接器的exe文件,它被指示保持沉默,但它不能保持它的嘴閉...... – Pat 2013-03-17 15:49:20

相關問題