C#_DLL反編譯功能_EXE(Application)和DLL(Application Extension)的差別在哪???_DLL的意義_反編譯目的
在探討下文之前
讀者若有興趣可以來讀(參考)一下「第22個冬天」
之前作者 撰寫的一篇教學文
C#自建類庫項目DLL_做一個自己的dll
DLL(Dynamic-link library)
是含有程式碼和可由多個程式在同一時間使用資料的程式庫。
最初目的是節約應用程式所需的磁碟和記憶體空間
供了如模組化這樣的共享函式庫的普通好處
DLL 和 EXE 差別在於
EXE 是可以直接被執行的
DLL 無法
EXE 是包含 一整個main method 主體的 !!!!
DLL 則是可不含且可編譯後 給其他程式載入使用!!!
在我們一般 程式 執行編譯後 就產生的 這個 .exe檔案
若我們去除掉 Main 主題區塊
就會有錯誤訊息出現
在來我們回來看 關於 DLL 產生的方式吧!!!!
到右側方案(紫色)中的 ---> 專案(綠色)
---> 右鍵 ----> 屬性 ---> 查看輸出地方為 Console Application
我們改為 Class Library
這時我們一樣故意把 Main主體區塊程式 移除
執行編譯
這兩個所產生出來的檔案其實還有一個差別
.exe檔案 ----> 叫做 「應用程式」 英文 Application
.dll檔案 ----> 叫做 「應用程式擴充」 英文 Application Extension
我們先來回過頭來探討一下
何謂 「反編譯」 ??
它的存在意義及目的為何???
DLL 在起初是為了方便節省記憶體空間 而在寫程式的人當中
所產生的 動態連結庫 之類的詞語
還記得我們以前學的 opencv 、 openGL 等等
概念是一樣的 都是用國外老外高手編譯製作好的程式類別庫
我們只要引用就能在開發
通常我們在寫程式的時候,我們會去接手別人的專案
可能是要去幫忙除錯或是改寫程式 增加額外的功能 等等 之類的
但是若你接到的一份專案
是完全沒有附上 程式碼 的
那這時就會頭大了
當初這個人(程式上一個源頭) 他是怎麼設計這套軟體程式的???
這是就有所謂的「逆向工程」、「反編譯」等詞出現了!!!
這裡介紹一個反編譯工具ILSpy
反編譯(.NET Decompiler)
情境模擬.
主管 叫你修改一個程式之類的......
或是要你做一個東西.....你想要知道他怎麼設計的......
這裡我先用一個簡單的 Windows Form 程式做示範
編譯前
編譯後
這時這個寫程式的工程師A 就傻了 只留下 .exe檔案
傳給你接手 或是他突然調職 外派 之類的......*&%%
然後這時主管限你在一周或一天甚至一個下午把這個功能解決修正
它們也不知道密碼是多少
此時 反編譯 技能 就派上用場了 !!!!!
藉此也可得知 他程式怎麼設計的
這樣就解決危機問題了
DLL 的 做法 反之亦然
這裡一樣模擬情境
工程師A 寫了一個方便計算的
類別 給你用 結果又忘記把程式碼檔案也給你
單純只給你 Dll 檔案
編譯前
編譯後
那這裡我們雖然是可以嘗試引用測試一些後面會出現捨麼方法
但是我們也可嘗試反編譯
編譯後
這時這個寫程式的工程師A 就傻了 只留下 .exe檔案
傳給你接手 或是他突然調職 外派 之類的......*&%%
然後這時主管限你在一周或一天甚至一個下午把這個功能解決修正
它們也不知道密碼是多少
此時 反編譯 技能 就派上用場了 !!!!!
藉此也可得知 他程式怎麼設計的
這樣就解決危機問題了
DLL 的 做法 反之亦然
這裡一樣模擬情境
工程師A 寫了一個方便計算的
類別 給你用 結果又忘記把程式碼檔案也給你
單純只給你 Dll 檔案
編譯前
編譯後
那這裡我們雖然是可以嘗試引用測試一些後面會出現捨麼方法
但是我們也可嘗試反編譯
留言
張貼留言