2013-10-17 14 views
5

Bellekte yüklü bir program var. Şimdi belleğe doğrudan erişmek ve OPCODE ve DATA'yı bu programın belleğinde değiştirmek istiyorum. Bunun için bir Java programı yazmam gerekiyor.Java ile bellek erişimi

Lütfen bunun uygun olup olmadığını söyler misiniz? Eğer evet ise, lütfen böyle bir program yazmayı bana bildirin.

Şimdiden teşekkürler!

+2

Bunun için c/C++ kullanmalısınız. – Sorter

cevap

6

Java bunun için tasarlanmamıştır.
Java'nın temel amacı, JVM'nin belleği sizin için yönetmesine izin vermektir. Böylelikle programlarınız korumalı.

Java başlangıçta güvenli, yönetilebilir ortamı olarak tasarlandı:

Ancak HotSpot JVM bir arka kapı var gibi görünüyor. Bununla birlikte, Java HotSpot VM, bellek ve iş parçacığı iş parçacıklarını doğrudan işlemek için düşük düzeyli işlemler sağlayan bir "arka kapı" içerir. Bu arka kapı - sun.misc.Unsafe - java.nio veya java.util.concurrent gibi paketlerde JDK tarafından yaygın olarak kullanılmaktadır. Bu API, son derece tehlikeli, taşınabilir olmayan ve uçucu olduğu için, bu arka kapıyı herhangi bir normal geliştirmede kullanan bir Java geliştiricisini düşünmek zor . Yine de, Unsafe, HotSpot JVM dahililerine bakmanın kolay bir yolunu sunuyor ve bazı hileler yapıyor. Bazen sadece komiktir, bazen VM + hata ayıklama olmadan VM dahili araştırma için kullanılabilir, bazen profil oluşturma ve geliştirme araçlar için kaldıraç olabilir.

Kaynak: Unsafe sınıf Ancak belgelenmemiş http://highlyscalable.wordpress.com/2012/02/02/direct-memory-access-in-java/

. https://stackoverflow.com/questions/5574241/interesting-uses-of-sun-misc-unsafe

Gayrıresmi Dokümanlar: http://mishadoff.github.io/blog/java-magic-part-4-sun-dot-misc-dot-unsafe/
Mutlak Başlayanlarhttp://java-performance.info/string-packing-converting-characters-to-bytes/
http://javapapers.com/core-java/address-of-a-java-object/

Dip not Sen SO fazla ayrıntı için cevap şuna bir göz atmak isteyebilirsiniz Linkin içeriğinin bir kısmını buraya göndermem gerektiğinin farkındayım, ancak makaleler gerçekten çok ayrıntılı olduğundan, bu bölümü atladım o bölüm

+1

Cevabınız için teşekkür ederiz. Güvenli olmayan yukarıdaki makalelere baktım. Anladığım şu ki, değişken değerleri değiştirmek ve OPCODE seviyesinde erişip değiştirmek için kullanılabilir. Doğru yolda olduğum halde lütfen bana bildirin. Teşekkürler. – kajarigd

+0

@kajarigd Bildiğimi söylemek yanıltıcı olabilir. Hala acemi olduğum için kendimi hiç güvensiz kullanmamıştım. Umarım, bazı tecrübeli Stacker size daha iyi yardımcı olacaktır =) –

+0

İşte biraz daha StackOver ** load **: http: // javapapers.com/core-java/adres-of-a-java-object/ –

0

İçinde java'daki belleğe doğrudan başvuru yapamazsınız c gibi java/C++

Sen Umarım yardımcı olur bu referencing memory address

geçmelidir.

+0

Cevabınız için teşekkür ederiz. Güvenilmezken belleğin herhangi bir kısmına veya sadece değişken değerlere erişebilir miyim bilmek isterim? Bir program belleğe yüklendiğinde, OPCODE, DATA formatında var. OPCODE'ye erişmek ve değiştirmek istiyorum. Mümkün mü? – kajarigd

+0

Bence ilk sorumun olmalı. java ile herhangi bir adres konumunu doğrudan değiştirebilir misiniz? Üzgünüm, hiç denemedim. Muhtemelen kendi başınıza aramak zorundasınız. herhangi bir çözüm bulursanız paylaşın. – Ashish