Java Sanal Makinesi – Blog Yazma – Web Tasarımı Yapımı – Web Tasarımı YouTube Videosu Yapımı – Web Sitesi Tasarlama Fiyatları
Yerel Kod Düzeltme Eki ile Tam Kontrol
Java sınıflarını değiştirmek, yamalamak ve tersine mühendislik yapmak için çeşitli teknikleri inceledik. Tüm teknikler, kaynak kodu veya bytecode düzeyinde çalışmayı gerektirir ve bu, yeteneklerimizi üst düzey Java dünyasıyla sınırlandırmıştır. Java Sanal Makinesi (JVM), yerel kitaplıklar aracılığıyla işletim sistemi (OS) ile etkileşime girer; bu, tüm düşük seviyeli işlemlerin Java’da kodlanmadığı ve bu nedenle sunulan tekniklerle manipüle edilemeyeceği anlamına gelir.
Örneğin, System.currentTimeMillis() yerel bir yöntemdir ve ClassLoader’ın tüm yöntemleri gerçek sınıf tanımını, defineClass0 adı verilen yerel yöntemine devreder. Java sınıfına yama uygulamak genellikle daha kolay ve temiz olsa da, bazı durumlarda yerel koda yama yapmaktan başka seçeneğiniz yoktur. Bu bölüm, daha önceki tekniklerle birlikte size JVM üzerinde tam kontrol sağlayan birkaç düşük seviyeli yerel kod düzeltme eki uygulama tekniği sunar.
Yerel yama ile ellerimizi kirletmeden önce iki önemli noktaya değinmek istiyorum. Birincisi, yapmak üzere olduğumuz işin yasallığı ile ilgilidir.
Bu yazı dizisinde daha önce tartışıldığı gibi, üzerinde çalıştığınız ürünün lisans sözleşmesiyle tersine mühendislik ve yama uygulamalarının yasaklanıp yasaklanmadığını kontrol etmek sizin sorumluluğunuzdadır. Yasa dışı olmasının yanı sıra, diğer insanlardan fikri mülkiyet çalmak etik değildir, bu nedenle sunulan teknikleri yalnızca iyi bir amaç için kullanmanızı şiddetle tavsiye ediyorum.
İkinci nokta, yerel kodla çalışmak, sağlam bir C dili bilgisi, bazı temel makine yönergeleri anlayışı ve ikili dosya biçimlerine aşinalık gerektirir. İkili dosyaların farklı platformlarda farklı biçimleri vardır ve iki farklı derleyici bile aynı platform için farklı çalıştırılabilir dosyalar üretebilir.
Örneğin, bir Microsoft C derleyicisi tarafından derlenen nesne dosyaları, bir Borland C derleyicisi tarafından oluşturulan dosyalardan farklıdır. İkili koda yama uygulamak, mevcut makine koduna makine talimatlarının eklenmesini ve ikili dosyanın değiştirilmesini gerektirir. Bu, keşfedilmemiş sulara açılmak gibidir, bu nedenle zorluklarla başa çıkmaya hazır olun ve her şeyin baştan işe yarayacağını beklemeyin.
Ortak, iyi tanımlanmış bir formatın olmaması ve ham makine komutlarıyla uğraşmanın karmaşıklığı, daha önce bize çok yardımcı olan iyi araçların eksikliğine neden olur. Örneğin, hiçbir kod çözücü ikili çalıştırılabilir bir dosyadan C kodu üretemez.
Bu bölüm için önkoşulların bir listesi aşağıdadır:
- C dilini anlamak
- Hedef platform için yerel kitaplıklar yazma ve derleme becerisi
- Makine yönergeleri ve montaj dili hakkında temel bilgi
- Java Yerel Arayüzü (JNI) ile biraz aşinalık
Java Sanal Makinesinde Yerel Kod Kullanımı
Çekirdek sınıflar da dahil olmak üzere JVM içinde yürütülen kodun çoğu Java ile yazılmıştır. Java temiz, güvenli ve platformdan bağımsız olduğu için bu çok mantıklıdır.
Ancak, bir noktada JVM’nin donanımla etkileşime girmesi gerekir; bunu yapmak için işletim sistemine güvenir. Bir sabit diskten bir bayt bloğu okumak veya bir ağ soketi oluşturmak gibi düşük seviyeli işlemler, işletim sistemine özel çağrılar yapan yerel kitaplıklara atanır.
“Sınıf Yüklemesini Kontrol Etme”, JVM tarafından sınıf ve yerel kod yüklemenin ilkel bir diyagramını gösterdi. Çoğu zaman yerel kitaplıklar, çağrıyı işletim sistemine platforma bağlı bir şekilde devreder. Java için yerel kitaplıklar yalnızca C dilinde yazılabilir ve JNI aracılığıyla erişilebilir.
Java indir
Java 32 bit
java download 64-bit
java sanal makinesi aşağıdakilerden hangini çalıştırmak için kullanılır?
Java SE
Java download
Java 64 bit
java 32-bit indir gezginler
JNI’ye Genel Bakış
Java’nın çapraz platform olması için kendisi ve işletim sistemi arasında bir soyutlama katmanı kullanması gerekir. Bu soyutlama düzeyi, JNI aracılığıyla erişilen bir dizi yerel kitaplıkta uygulanır. JNI, Java’da yerel yöntemlerin nasıl tanımlanacağını ve bu yöntemlerin C kitaplıklarında nasıl uygulanacağını açıklayan bir belirtimdir. Başka bir deyişle, JNI, Java sınıfları ve yerel kitaplıklar arasında bir sözleşme sağlar.
Sözleşmenin Java tarafı basittir: Yerel bir yöntem bildirmek için, yöntem bildirimine bir anahtar kelime (yerel) eklemeniz ve bildirimi noktalı virgülle bitirmeniz yeterlidir. Bir Java programının toplam fiziksel ve sanal bellek miktarı ve yerel makinedeki kullanılabilir fiziksel ve sanal bellek miktarı gibi bellek parametrelerini bulması gerektiğini varsayalım.
Java.lang.Runtime sınıfı, toplam bellek özelliklerini değil, yalnızca JVM için bellek parametreleri hakkında bilgi sağlayabilir, bu nedenle işletim sistemine yerel bir çağrı yapmaya başvurmamız gerekir. Bunu başarmak için, bir dizi yerel yönteme sahip OSMemoryInfo adında bir Java sınıfı yazıyoruz. Bu, toplam fiziksel belleği döndüren yöntemin bildirimidir.
Yöntem bildirildikten sonra, diğer Java sınıfları tarafından derlenebilir ve kullanılabilir. Yöntemi çalıştırma girişimi, java.lang.UnsatisfiedLinkError ile sonuçlanır çünkü getPhysicalTotal() için henüz bir uygulama sağlanmamıştır. Yerel yöntemleri yürütmek için, onu bildiren Java sınıfının, yöntem uygulamasını sağlayan bir yerel kitaplık yüklemesi gerekir.
Yerel kitaplıklar işletim sistemine bağlıdır; bu, uygulamanın çalışması gereken her platform için kitaplığın farklı bir sürümünün yazılması gerektiği anlamına gelir. Uzantı platforma bağlı olduğundan kitaplık yalnızca ada göre yüklenir. Windows’ta kitaplık dosya adları .dll ile biter; Unix’te .so ile biterler. Liste, OSMemoryInfo adlı bir kitaplığın nasıl yükleneceğini gösterir.
Kitaplık, sınıf bir JVM’ye ilk yüklendiğinde yürütülen statik bir başlatıcı tarafından yüklenir. Bu adım Java tarafındaki sözleşmeyi tamamlar ve bizi yerel kod tarafına getirir.
OSMemoryInfo sınıfını yürütmek için, JVM’ye tüm yerel yöntemlerin uygulamalarını içeren bir kitaplık sağlanmalıdır. Kitaplığın konumu, platforma özgü bir arama yolu ile belirlenir.
Windows’ta arama yolu, geçerli dizini ve PATH ortam değişkeni tarafından belirtilen dizinleri içerir. Unix’te arama yolu, adı Unix çeşidine bağlı olan bir ortam değişkeni tarafından belirlenir. Örneğin, Solaris’te adı LS_LIBRARY_PATH ve HP UX’te SH_LIB_PATH’dir. Yerel kitaplığın adı da işletim sistemine özeldir.
Windows’ta yerel kitaplığımız OSMemoryInfo.dll olarak adlandırılırken, Unix’te OSMemoryInfo.so olur. Kitaplığın gereksinimi, Java sınıfında tanımlanan yerel yöntemlerin adı ve bildirim sözdizimiyle eşleşen işlevleri dışa aktarmaktır.
JNI, C türleri ile Java türleri arasındaki tür eşlemesini belirtir ve Java nesnelerine erişim, istisnalar oluşturma ve veri türlerini manipüle etmek için kapsamlı mekanizmalar sağlar. Örneğin, daha önce gösterilen getPhysicalTotal() Java yöntemini uygulayan bir C işlevi aşağıdaki gibi bildirilmelidir.
Web sitelerinizi, arama motorlarında en yukarı getirmek adına sizlere 3 adet paket öneriyoruz. Bu paketler sayesinde web siteleriniz aramalarda 1 yıl içerisinde en yukarıya tırmanacaktır.
1) Backlink Paketi 50 $ (Yıllık Ücret)
2) Hızlandırma Paketi 300 $ (Yıllık Ücret)
3) Kelime Yönlendirme Paketi 150 $ (Aylık Ücret)