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 檔案

編譯前


編譯後


那這裡我們雖然是可以嘗試引用測試一些後面會出現捨麼方法

但是我們也可嘗試反編譯

這樣就能知道當時寫程式的上一個工程師設計構思了!!!!



希望對反編譯的新手有幫助




留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header