爲了讓問題更容易理解,有一個名爲的軟件CheatEngine,它的基本功能是收集您嘗試使用的軟件的所有字節,您可以選擇其中的任何字節並進行更改價值。Java:我如何從其他程序獲取值?
例如,您想更改任何遊戲的分數。您可以搜索當前分數的值,並將其更改爲任何您想要的值。
現在的問題是,是否有可能使用java創建類似這樣的內容,它將從內存中獲取所有數據,以及您試圖「入侵」到的軟件使用的內容?
讓我知道應該查找哪些來源。
P.S.如果帖子出現語法錯誤,我很抱歉。我來自俄羅斯,我不是英語最好的。
爲了讓問題更容易理解,有一個名爲的軟件CheatEngine,它的基本功能是收集您嘗試使用的軟件的所有字節,您可以選擇其中的任何字節並進行更改價值。Java:我如何從其他程序獲取值?
例如,您想更改任何遊戲的分數。您可以搜索當前分數的值,並將其更改爲任何您想要的值。
現在的問題是,是否有可能使用java創建類似這樣的內容,它將從內存中獲取所有數據,以及您試圖「入侵」到的軟件使用的內容?
讓我知道應該查找哪些來源。
P.S.如果帖子出現語法錯誤,我很抱歉。我來自俄羅斯,我不是英語最好的。
Java在直接內存訪問中非常受限制(出於一個很好的原因),所以用Java完成這個操作是不太可能的。 JNI可以執行(管理或不安全)操作系統操作,所以你可以嘗試調用任何返回給定內存位置數據的C函數,但是我想你最好先使用C(而不是Java),然後。
因此,也許我不想改變內存。如果我想要讀取內存,該怎麼辦? – user2852371
@ user2852371那麼這個答案仍然適用,不是嗎? – immibis
這同樣適用於讀取Java虛擬機之外的內存。 – user1438038
通過語言定義java在JVM的沙箱中運行。所以不可能訪問外部存儲器中的其他地方。另外Java不能訪問內存中的特定位置,也沒有指針。
您應該閱讀'sun.misc.Unsafe'。它絕對可以訪問內存中的特定位置。 –
謝謝,現在閱讀。它似乎是Java 9 API的一部分。 – andreadi
據我所知,java不支持直接訪問內存。如果你仍然想訪問內存,你必須使用JNI。但是,那也不是一個好選擇。 所以我認爲最好的方法是放棄Java的目的,並嘗試使用C或C++。 C#.NET也是可能的。
P.S 由於@PhilipWhitehouse建議可能有sun.misc.Unsafe包的一種方法。嘗試閱讀http://mishadoff.com/blog/java-magic-part-4-sun-dot-misc-dot-unsafe/
'sun.misc.Unsafe'給你一些直接的內存訪問。但目前還不清楚您是否可以在Java流程之外獲得內存。 –
@PhilipWhitehouse我之前沒有意識到這一點。我會將其添加到我的答案中。感謝您的評論 –
在Java中,沒有本地方法,沒有。 – immibis
[使用Java訪問內存]的可能的重複(http://stackoverflow.com/questions/19418900/accessing-memory-with-java) – dit
@dit:你說得對,它沒有OP預期的答案。刪除我的評論。 – LittlePanda