ASM (Java Bytecode) Nedir? Kütüphane Açıklaması

ASM, çalışma zamanında JVM bytecode'unu okuma ve yazma için bir Java kütüphanesidir. İşte ne yaptığı, nasıl çalıştığı ve neden Minecraft modlarının buna güvendiği.

Librariesby trqUpdated June 4, 2026
Key takeaways
  • ASM, JVM bytecode'u okuma, değiştirme ve yazma için bir Java kütüphanesidir.
  • Derlenmiş .class dosyaları üzerinde çalışır, böylece bir sınıfı yeniden derlemeden yeniden yazabilir.
  • Mod'lar, yükleme zamanında zaten derlenmiş oyunu yamalamak için bunu kullanır.
  • Çoğu mod yapımcısı, ASM'nin üzerine oturan ve detayları gizleyen Mixin'i kullanır.

ASM, JVM bytecode'u okuma, değiştirme ve yazma için bir Java kütüphanesidir. Kaynak kod yerine derlenmiş .class dosyaları üzerinde çalışır, böylece bir sınıfı yeniden derlemeden inceleyebilir veya yeniden yazabilir. Minecraft modları, oyunun zaten derlenmiş olmasının ardından yükleme zamanında oyunu yamalamasına olanak tanıdığı için ASM'ye güvenir.

Opal Nerede Çalışır

Opal, bir Fabric modudur ve Fabric modları bu bytecode katmanı aracılığıyla oyun koduna erişir. Onu doğrudan etkilemezsiniz: betik motoru size Opal'ı bytecode yazmadan uzatmanın temiz bir yolunu sunar.

ASM'nin aslında ne yaptığı

ASM, derlenmiş bir sınıfı, bir programın düzenleyebileceği bir şeye dönüştürür. Bir .class dosyası sadece bayt kodudur; Java Sanal Makinesi'nin çalıştırdığı talimatlardır. ASM bu bayt kodunu ayrıştırır, size metotları ve alanları sunar ve talimatları eklemenize, silmenize veya değiştirmenize olanak tanır. Ardından yeni, geçerli bir sınıfı tekrar yazar.

Basit Java, bunu kendi başına yapamaz. Derleyici, kaynak kodunuzu bir kez bayt koduna dönüştürür ve bundan sonra bayt kodu sabittir. ASM, normalde yazdığınız kaynak kodunun altındaki katman olan bayt koduna erişir

Nasıl çalışır

ASM, bir ClassReader ile bir sınıf okur ve bir ClassWriter ile yazar. İki aralıkta, kodunuz sınıfın bölümlerini ziyaret eder ve neyi değiştireceğine karar verir. Bunu yapmanın iki yolu vardır.

Ziyaretçi yaklaşımı, sınıfı birer birer elemanlar halinde akıtır. Bütün sınıfı aynı anda tutmadığı için hızlıdır ve az bellek kullanır. Ağaç yaklaşımı ise, sınıfı serbestçe gezinebileceğiniz ve düzenleyebileceğiniz nesnelere yükler; bu, daha büyük değişiklikler için akıl yürütmek daha kolay olsa da daha fazla bellek kullanır.

YaklaşımNasıl çalışırEn iyi olduğu durumlar
Ziyaretçi API'siSınıf olaylarını okuma sırasında akıtırKüçük, hızlı düzenlemeler ve düşük bellek kullanımı
Ağaç API'siSınıfın düzenlenebilir bir nesne modelini oluştururDaha büyük veya daha karmaşık yeniden yazmalar

Neden Minecraft modları onu kullanır

Modların, yazmadıkları ve yeniden derleyemedikleri oyun kodunu değiştirmesi gerekiyor. Oyun, derlenmiş sınıflar halinde gönderiliyor, bu yüzden tek yol bytecode seviyesinden girme yoludur ve ASM işte tam da bunu sağlar. Bir mod, bir oyun metoduna bir hook enjekte edebilir, bir çağrıyı yönlendirebilir veya başlatmada bir alan ekleyebilir.

Çoğu mod yapımcısı ASM'yi doğrudan çağırmaz. ASM'nin üzerine oturan ve basit notasyonları alttaki bytecode düzenlemelerine dönüştüren daha üst düzey bir çerçeve olan Mixin'i kullanırlar. Değişikliği açıklayan küçük bir Java sınıfı yazarsınız ve çerçeve ASM ile sizin için düşük seviyeli işleri yapar. Özellikle Fabric modları bu zincire dayanır.

ASM'yi doğrudan ne zaman kullanırsınız

Bir mod yazarı olarak nadiren ham ASM yazarsınız. Bu durum, bir yükleyici, bir karıştırıcı veya sınıfları bütünüyle yeniden yazan bir yamayı gibi bir aracın bir notasyonun ifade edebileceğinden daha fazla kontrole ihtiyaç duyduğu zaman ortaya çıkar. Günlük modlar için, üzerindeki notasyon katmanı yeterlidir ve çok daha hatasızdır.

SSS