簡體   English   中英

C#鈎子:System.Random

[英]C# Hook : System.Random

我想監視使用System.Random類的軟件。
我希望能夠:

1 /監視所有隨機實例的創建
2 /強制此實例使用的種子
或2bis /將隨機結果強制為我自己的隨機數

我需要該軟件即使在不同的計算機上也必須始終表現相同,因此我可以更好地測試自己的與之通信的軟件。

我已經閱讀了EasyHook的教程,但我認為它們僅提及函數掛鈎,而不涉及類創建或類方法掛鈎。

.NET框架沒有提供鈎住方法調用的良好機制。 即時編譯器以及ngen.exe預抖動使這無法實現。 沒有好的方法來獲取方法的地址,也沒有任何合適的方法來修補代碼,因為這樣做沒有任何間接跳轉。 例如,像EasyHook這樣的鈎子依賴於DLL導入表中存在的跳轉類型。

在抖動看到代碼之前 ,必須先將其弄亂。 這也是PostSharp等面向方面的編程工具的實現方式。 它們是IL重寫器,它們在運行代碼之前會修改程序集。 因此,該方案是用對您的方法的調用替換對IL中對System.Random的調用。 並添加對程序集的依賴。

“ IL重寫”是一個很好的Google搜索詞,用於查找實現。

“ IL重寫”似乎是您的最佳選擇,盡管如果它在kernel32中調用GetTickCount() ,則可能可以檢測和更改默認實例的創建:

public Random() : this(Environment.TickCount)
{
}

我真的不知道Environment.TickCount是否實際調用GetTickCount() 但這是合理的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM