2011-10-01 76 views
1

我一直在試圖找到DLL和EXE發現通過使用ASP .Net和反射編寫程序的方式對技術的更多信息(?)。我一直無法找到任何東西。探測的Dll

我知道這裏有拆卸器,但我並不感興趣其他工具和反彙編代碼,我更感興趣的是理解如何編寫一個程序,該程序需要一個未知文件或可執行文件,並確定其中的屬性和方法是公開的。

我剛開始在我的搜索這一點,並想知道任何好的資源,助推學習過程。

回答

0

我更感興趣的是理解如何編寫一個程序,該程序需要一個未知文件或可執行文件,並確定其中的屬性和方法是公開的。

反思是做到這一點的好辦法。如果你不想完整的代碼解釋,這裏有一些提示。

  1. 您可以使用Assembly.ReflectionOnlyLoad加載現有程序集。這隻適用於.NET程序集。 LoadReflectionOnlyLoad之間的區別是,Load加載一個組件,其允許您使用它,就像在組件的類型執行的方法。 ReflectionOnlyLoad在您只想查看程序集中的內容而不執行任何代碼時非常有用。 ReflectionOnlyLoad的另一個優點是它不關心程序集編譯的平臺。

  2. 組裝完成後,您可以使用像GetExportedTypes這樣的方法來獲取所有公共類型的列表。如果你想獲得公衆和非公衆的支持,你只能使用GetTypes()。

  3. 所以現在我們有我們的組件加載,所有類型的列表。 Type類有幾個成員使用該類型。想起GetMethods和GetProperties。

您可以參考this MSDN文章以獲取有關Reflection的更一般性概述。

+0

這是一個良好的開端我。這是否意味着如果我想發現其他可能沒有用.net編寫的dll,我需要使用另一種語言。 C++會成爲編寫未知dll探測器的更好選擇。在你看來,哪種方法最適合選擇,哪種方法最適合靈活的dll探測器? – byten

+0

@byten .NET存儲的所有信息與本地二進制文件大不相同。如果你想知道更多關於不是爲.NET編寫的DLL,我會開始學習[PE文件格式](http://en.wikipedia.org/wiki/Portable_Executable) – vcsjones