我想弄清楚,如果它通過反射可能(或其他方式),以「審計」一些代碼來執行驗證要求 - 如檢查是否代碼創建的所有線程(的System.Threading .Thread)或使用其他BCL。假設是代碼已經編譯成一個dll。謝謝!C#反射和審計類型
1
A
回答
0
反思不允許體成員的檢查,只有他們的簽名。換句話說,它不會告訴你什麼特定的方法或屬性確實是,它看起來像什麼。
要做你正在做的事情,你必須使用類似ildasm.exe
的東西來將編譯好的.dll或.exe文件轉換爲IL文件,然後再通過IL文件,看看它是否在做任何你反對的東西。
2
看看FxCop。它可以加載編譯後的二進制文件(dll或exe),並對編譯後的IL執行驗證和合規性檢查,而不管用於編寫它的.NET語言。
你可以寫自己的規則 - 你會在這種情況下,做趕上「=新的Thread()」之類的情況。
1
正如其他人所說反射不會幫助你,因爲它只描述了tpyes的元數據。
然而,Mono.Ceci升項目是一個組件內實際的類型看IL(中間語言)的運行時的方式。雖然Mono框架的產品與Microsoft CLR兼容。
2
如果你非常熟悉IL,你可以用反射來做到這一點。
MethodBody mb = this.GetType().GetMethod("Method", BindingFlags.Default).GetMethodBody();
byte[] bytes = mb.GetILAsByteArray();
可能更麻煩的方式比它值得;得到的IL將需要被解析。
一個IL語法分析器(但有些過時):http://www.codeproject.com/KB/cs/sdilreader.aspx它將爲您生成一個OpCodes列表(查找用於實例化Thread的OpCodes.Newobj)。
0
反射將允許您通過MethodBase.GetMethodBody檢查方法的身體,給你一個MethodBody檢查。
然而,在這個水平,你在一個字節數組處理生IL,你必須分析開始到結束,以找出外部方法調用和他們做了什麼等
,所以它不會相當或簡單,但肯定有可能。
相關問題
- 1. 反射和泛型類型
- 2. C#,反射和原始類型
- 3. C#反射 - 類型錯誤
- 4. 對象審計使用反射
- 5. C#反射 - 投射參數到類型
- 6. C#泛型和反射
- 7. 反射類型和類型描述符
- 8. VB .NET DirectCast和類型反射
- 9. Kotlin:isAssignableFrom和反射類型檢查
- 10. 反射和自動生成類型
- 11. 反射和拳擊值類型
- 12. 確定反射類型是否可以投射到另一種反射類型
- 13. 獲取C#反射中「類型」的類型
- 14. 通過反射獲取.Net對應類型的C#類型
- 15. C#反射類型與可變數量的類型參數
- 16. C#好友類/元數據和反射
- 17. C++中的元類和反射
- 18. 非stringly類型的反射
- 19. 類型約束的反射
- 20. NHIbernate:映射審計用戶
- 21. 動態類的c#反射
- 22. C#實例化泛型列表與反射類型信息
- 23. c#mvc使用反射獲得泛型類型
- 24. 用c反射的惰性泛型類型的調用方法#
- 25. Java反射getDeclaredMethod()與類類型
- 26. 子類反射類型錯誤
- 27. C#反射:獲取調用類的類型
- 28. c#,內部和反射
- 29. C#和使用反射
- 30. 類路徑和反射
大家反饋很好,謝謝! – user644107 2011-03-04 17:16:05
我試過fxcop,但需要無人看管的安裝,所以最終使用憲兵,這已經很好(除了1次要的事情,我會問一個後續問題。)感謝提示! – user644107 2011-03-06 04:00:21