簡體   English   中英

我可以在虛擬內存中的哪里找到由.Net JIT編譯的x86代碼

[英]Where in the Virtual Memory can I find x86 code compiled by .Net JIT

我了解到,第一次調用函數時,將調用JIT並將其將.Net IL代碼編譯為x86指令,並將其保存在內存中的某個位置。 我需要知道此x86代碼的存放位置,以便我可以分析x86匯編指令(目的在此問題中並不是很重要。)有人可以告訴我如何確定內存位置。存儲已翻譯的代碼,或者可能存儲JIT代碼中的哪個功能。 我隨身攜帶了JIT代碼(因為.net源代碼在GitHub上發布,但到目前為止,我對代碼的大小不知所措)。 我將不勝感激。 提前致謝...

如果有人可以建議一個反匯編程序,它可以給正在運行的.net exe x86匯編指令轉儲,這將很有幫助,就像Visual Studio的反匯編程序一樣,但是我需要自動運行它。 我知道這可以由ngen靜態完成。 ngen可以轉換為x86指令,然后任何反匯編程序都可以獲取轉儲,但是對我來說重要的是,必須在exe運行之后才能執行此操作。

這是因為我需要x86指令轉儲的原因是要找到多個.net exe之間的相似性。 直接查看靜態分解的裝配所面臨的挑戰是,它可以打包或混淆,在這種情況下,即使它們內部相似,它們也可能看起來不相似。 但是在運行時,它們將由打包程序解壓縮/解混淆,並且JIT編譯的x86指令看起來很相似。

您可以使用調試器api來讀取流程中的固定指令。 (具體來說,是ICorDebugFunction :: GetNativeCodeICorDebugCode2 :: GetCodeChunksICorDebugProcess :: ReadMemory的組合 )。

以這種方式執行操作可能會要求方法已經被偽裝……但是您可能可以使用ICorDebugEval進行安排(也許在方法開始時帶有斷點,然后在命中該方法時終止eval)。

暫無
暫無

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

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