3 puan yazan GN⁺ 2024-03-31 | 1 yorum | WhatsApp'ta paylaş
  • rev.ng, decompiler backend’i revng-c’yi yayımlayarak decompilation motorunu açık kaynağa dönüştürdü; bununla birlikte kapalı beta UI, yeni web sitesi, rev.ng Hub ve dokümantasyonu da sundu
  • Yerelde, kurulum betiğiyle CLI yapılandırıldıktan sonra revng artifact ve revng ptml kullanılarak geçerli C kodu biçimindeki decompilation çıktısı görülebiliyor
  • İnteraktif UI, VSCode tabanlı olarak tarayıcı ve bağımsız uygulamayı hedefliyor; bülten abonelerinin FIFO yöntemiyle davet edildiği kapalı betada sunuluyor
  • Otomatik veri yapısı kurtarma, işbirlikçi reverse engineering, çeşitli mimari desteği ve genişletilebilirlik temel hedefler; ancak mevcut QA en çok Linux x86-64 binary’lerine odaklanıyor
  • Framework ve CLI açık kaynak; bulut UI herkese açık projeler için ücretsiz sunulurken, özel projeler ve çevrimdışı bağımsız UI ücretli modelle ayrılıyor

Açık kaynağa geçiş ve kapalı beta

  • rev.ng, decompiler backend’i revng-c’yi açık kaynak olarak yayımladı
    • Bu yayınla birlikte tüm decompilation motoru açık kaynak olmuş oldu
    • İlk dokümantasyon da birlikte sunuldu
  • UI için bülten abonelerine yönelik kapalı beta davetleri başlaması planlanıyor
    • Davetler FIFO yöntemiyle ilerleyecek
    • Betaya katılmak için bültene kayıt gerekiyor
  • Yeni web sitesi ve rev.ng Hub da birlikte açıldı
    • rev.ng Hub, bulut sürümüne giriş noktası
    • Beta kullanıcıları proje oluşturabiliyor, UI’ı tarayıcıda çalıştırabiliyor ve diğer kullanıcılarla işbirliği yapabiliyor
    • Kapalı beta kapsamında olmasanız da herkese açık projelere göz atabilirsiniz
  • rev.ng özelliklerini doğrudan görmek isteyen kullanıcılar için özel demo da sunuluyor

CLI ile rev.ng’yi denemek

  • revng, root yetkisi olmadan tek bir dizine kurulabiliyor ve o dizin silindiğinde kaldırılmış oluyor
curl -L -s https://rev.ng/downloads/revng-distributable/master/install.sh | bash
cd revng
source ./environment
  • Örnek example.c, argc * 3 döndüren basit bir program
int main(int argc, char *argv[]) {
  return argc * 3;
}
  • gcc ile derledikten sonra revng artifact çalıştırılırsa tek dosya biçiminde bir decompilation çıktısı alınabiliyor
gcc example.c -o example -O2
revng artifact \
        --analyze \
        --progress \
        decompile-to-single-file \
        example \
        | revng ptml --color \
        | grep -A2 -B1 '[^_]main\b' \
        > decompiled.c

Beta kapsamı ve test hedefleri

  • UI’ı kullanmak için bültene kayıt olmak gerekiyor ve davetler küçük gruplar halinde gönderiliyor
  • Bu sürüm, bazı binary’lerde UI ve decompilation sonuçlarını demo etmeye, ayrıca gerçek binary çalışmaları için geri bildirim ve hata raporu toplamaya odaklanıyor
  • Testte kullanılan basit olmayan binary’ler ve .text boyutları şöyle
  • rev.ng birden çok ABI ve platformu destekliyor, ancak bu aşamadaki ilk QA özellikle Linux x86-64 binary’lerine odaklanıyor
  • Sorun yaşanırsa Discourse üzerinden yardım alınabiliyor

rev.ng’nin hedeflediği decompilation deneyimi

  • rev.ng’nin başlıca odağı otomatik veri yapısı kurtarma, modern UX, işbirlikçi reverse engineering, geniş platform desteği ve genişletilebilirlik
  • Otomatik veri yapısı kurtarma

    • Data Layout Analysis ile struct düzeni prosedürler arası analiz yoluyla otomatik olarak kurtarılabiliyor
    • Bağlı liste düğümü örneği, int64_t data[5] dizisi ve sonraki düğüme işaretçi içeren bir yapıyı ele alıyor
    • rev.ng çıktısı, dizi boyutu 5’i ve sonraki öğe işaretçisine erişimi otomatik algılayan struct ve fonksiyon kodu üretiyor
    • Decompiler çıktısı sözdizimsel olarak geçerli C kodu
    • Bu özellik şu anda kullanılabiliyor
  • VSCode tabanlı interaktif UI

    • UI VSCode tabanlı olduğundan, VSCode kullanıcıları buna alışık bir şekilde yaklaşabiliyor
    • Hem tarayıcı sekmesinde hem de bağımsız uygulama olarak çalışabiliyor
    • Başlıca kısayollar şöyle
      • Ctrl + Click: İmlecin altındaki fonksiyon veya tür tanımına git
      • N: Yeniden adlandır
      • Y: Tür düzenle
      • X: Referansları göster
    • rev.ng, değişiklik olduğunda yalnızca etkilenen bölümleri yeniden hesaplayan interaktif bir decompiler
    • UI şu anda kapalı beta katılımcılarına sunuluyor
  • İşbirlikçi reverse engineering

    • rev.ng UI, istemci-sunucu mimarisi kullanıyor
    • Birden fazla kullanıcı aynı daemon örneğine bağlanıp aynı proje üzerinde eşzamanlı çalışabiliyor
    • Bulut sürümünde, proje yönetimi için GitHub benzeri bir uygulama olan rev.ng Hub kullanılabiliyor
    • İşbirliği özellikleri çalışıyor, ancak kullanıcı deneyiminde iyileştirmeye ihtiyaç var; bu durum yol haritası maddesi #797 altında izleniyor

Mimari ve platform desteği yaklaşımı

  • rev.ng, QEMU pipeline’ının ön kısmını kullanarak yürütülebilir kodu tiny code’a kaldırıyor, bunu LLVM IR’ye dönüştürüyor ve ardından decompilation yapıyor
  • Bu yapı sayesinde QEMU’nun desteklediği mimariler görece kolay şekilde desteklenebiliyor
  • Mimari desteği kadar platform, özellikle de ABI desteği de önemli
    • rev.ng, ABI özelliklerini bildirimsel olarak tanımlamak için ABI description format kullanıyor
    • Bu format, yeni ABI desteğini kolaylaştıracak kadar genel tasarlanmış
  • Mevcut destek durumu şöyle
    • Mimariler: x86, x86-64, ARM, AArch64, MIPS, s390x farklı olgunluk seviyelerinde destekleniyor
    • Binary formatları: ELF, PE/COFF, Mach-O destekleniyor
    • İçe aktarma: .idb, DWARF debug bilgisi ve PDB debug bilgisi destekleniyor
  • QA’nin büyük kısmı Linux x86-64 binary’leri üzerinde yapıldı; kalan kısımlar için ek QA gerekiyor
  • Daha fazla platform QA çalışması yol haritası maddesi #58 altında izleniyor

Genişletilebilirlik ve betikleme

  • rev.ng, reverse engineering araçları için bir framework olmayı hedefliyor ve interaktif UI hariç tüm proje açık kaynak
  • Proje dosyası olan model bir YAML belgesi olduğundan, JSON veya YAML parse edebilen herkes rev.ng’yi betikleyebiliyor
  • Model, decompile edilecek binary’nin mimarisi, varsayılan ABI’si, segmentleri, fonksiyon listesi, tür listesi gibi bilgileri içeriyor
  • Model, Python ve TypeScript sarmalayıcılarıyla değiştirilebiliyor
    • Şu anda model işleme sarmalayıcıları var, ancak analiz çalıştırmayı ve artifact almayı kolaylaştıran bir yöntem henüz yok
    • Tam teşekküllü Python istemcisi yol haritası maddesi #17 altında izleniyor
  • İç temsilde yoğun biçimde LLVM IR kullanıldığı için LLVM ekosistemi araçlarından yararlanılabiliyor

Açık kaynak CLI ile ücretli UI arasındaki ayrım

  • rev.ng framework’ü tamamen açık kaynak ve CLI üzerinden istediğiniz hedefi decompile edebiliyorsunuz
  • UI sunum modeli üçe ayrılıyor
    • Herkese açık projeler için bulut UI ücretsiz kullanılabiliyor
    • Özel projeler için bulut UI abonelik gerektiriyor
    • Tam bağımsız ve tamamen çevrimdışı UI ücretli sunuluyor
  • Bulut kullanım modeli şöyle
    • rev.ng Hub üzerinden proje oluşturuluyor ve işbirlikçiler davet ediliyor
    • UI tarayıcıda çalışıyor
    • Backend rev.ng bulutunda çalışıyor
  • Proje dosyalarını herkese açmanızda sakınca yoksa, UI dahil bulut rev.ng sürümünü ücretsiz kullanabiliyorsunuz
  • Kubernetes kullanan şirket içi özel bulut hizmeti kurulumu da görüşülebiliyor

1.0 yol haritası ve iletişim kanalları

  • 1.0’a kadar olan yol haritası 4 katmana ayrılıyor
    • Tier 1: Alfa sürüm, tanıdıklara demo, tamamlandı
    • Tier 2: Beta sürüm, bülten abonelerine bulut sürüm erişimi sağlanması, şu anda başladı
    • Tier 3: Açık beta, planlanıyor
    • Tier 4: 1.0 sürümü, planlanıyor
  • Ayrıntılı ilerleme durumu yol haritası sayfasından takip edilebiliyor
  • Proje haberleri ve destek kanalları şöyle
    • X/Twitter: geliştirme haberleri ve ana duyurular
    • Discord: geliştirme ekibiyle gerçek zamanlı sohbet
    • Discourse: kullanıcı desteği ve hata raporları
    • GitHub: açık kaynak geliştirme ve issue kaydı
    • Monthly newsletter: kapalı beta katılımı ve aylık haberler
    • E-mail: özel iletişim

1 yorum

 
GN⁺ 2024-03-31
Hacker News görüşleri
  • Fiyatlandırma modeli, rev.ng framework'ünün tamamen açık kaynak olması ve CLI üzerinden her şeyin decompile edilebilmesi üzerine kurulu
    UI; açık projeler için bulutta ücretsiz, özel projeler için bulut aboneliği, tamamen bağımsız çevrimdışı uygulama için ise ücretli olarak sunulacak
    Karşılaştırma yapmak gerekirse Hopper, 1 yıllık güncellemeler dahil 100 dolar https://www.hopperapp.com/index.html; Ghidra ve Radare2 özgür ve açık kaynak oldukları için tamamen ücretsiz; IDA Pro ise çok pahalı

    • Binary Ninja da iyi bir seçenek
      Kullandığım kadarıyla IDA'ya oldukça benziyor ama daha kullanıcı dostu ve üretkenliği artıran, iyi tasarlanmış birçok özelliği var
      Hopper'ı kullanmadım, ancak Ghidra ve Radare2'de geliştirme deneyimi pek iyi değildi; üretilen C kodu da kolay okunmuyordu. Gerçi ikisini de birkaç yıl önce kullanmıştım
      Binja 300 dolar, ticari sürüm 1500 dolar ve öğrenci indirimi de var: https://binary.ninja/features
    • Decompile işlemi, IDA/Ghidra'da çoğu zaman en az önemli ve en az güvenilir kısımdır; bu yüzden ikisini basitçe karşılaştırmak pek adil değil
      Yine de iyi C decompiler'lar her zaman az bulunuyor, bu yüzden yeni denemeler her zaman sevindirici
    • Tek seferlik ödeme ve belirli bir güncelleme süresi lisans modelini gerçekten seviyorum
      Ancak uygulama internet erişimini zorunlu kılmadan bunu nasıl uygulatıyor, merak ediyorum
  • Ekip sayfasına https://rev.ng/about ve kod katkılarına https://github.com/revng/revng/graphs/contributors bakınca, CEO'nun (aleclearmind) CTO'dan (pfez) çok daha fazla commit'e sahip olması biraz sıra dışı görünüyor
    Diğer CEO'lar sık sık kod yazmaya neredeyse hiç vakit bulamadıklarını söylüyor; CTO'lar da genellikle daha çok yönetim tarafında oluyor ve fiili kodlama daha az yapıyor
    Yine de bu yöntem iyi işliyorsa ekip açısından oldukça ilginç olsa gerek. Düzenleme: Zaman çizelgesini kontrol etmemiştim

    • CTO ağırlıklı olarak yeni yayımladığımız decompiler backend'i revng-c üzerinde çalışıyor: https://github.com/revng/revng-c/commits/develop/
      Sonunda iki depoyu birleştireceğiz
      Ayrıca ben her gün geliştirme yapıyorum ama nedense GitHub kullanıcımı düzgün yakalayamıyor
      Gerçekten de eğlenceli
    • CTO daha yakın zamanda çok sayıda commit atmış; aleclearmind'in commit'leri ise 2020'den sonra 0'a düşmüş, yani onun tarafında da kodlamaya zaman ayırmak zorlaşmış gibi görünüyor
    • Hiç eleştirmek istememiştim; neden downvote aldığımı biraz merak ediyorum
      Aksine bu tablo hoşuma gitmişti ve başka yerlerde gördüklerimden farklı olduğu için ilginç bulmuştum
      İlginç ya da sıra dışı olmadığı için mi downvote edildi?
  • Mevcut en iyi programlama dili teorisi kitaplarından birinden güç alan harika bir şirket gibi görünüyor: https://link.springer.com/book/10.1007/978-3-662-03811-6
    “Ayrıca suç ortağı olacak Pietro ile de tanıştı. Oldukça romantik biçimde, şirketin temelini oluşturacak kitap sayesinde tanıştı.”
    https://rev.ng/about

    • O kitapla ilgili tüm hikâye şöyle. Compiler'ları çalışmaya başlamıştım ama teori çok zordu; ünlü kitaplar da bana uymamıştı, bu yüzden epey moralim bozulmuştu
      Sonra yoğun ama anlaşılır görünen bu kitabı buldum; danışmanıma satın alıp alamayacağımı sordum, o da “Önce üniversite kütüphanesine bak” dedi
      Kütüphanede bir kopyası vardı ama zaten ödünç alınmıştı; compiler araştırması yapan tek grupta olduğum için “Bizim grubun dışında kim compiler yapmaya cüret eder?” diye düşündüm
      Kütüphaneye gidip kimin ödünç aldığını sordum ama kişisel veri olduğu için söyleyemeyeceklerini söylediler; sadece soyadının üçüncü harfini ve adının ikinci harfini sorarak Z ve I harflerini aldım
      Buradan buldum: https://www.deib.polimi.it/ita/personale-lista-alfabetica
      Zamanla arkadaş olduk ve birlikte şirket kurduk
      Lansmana kadar gerçekten çok fazla iş gerekti
  • Kodun değişkenleri ve struct üyelerini nasıl kullandığına bakarak değişken adları ve struct üyesi adlarını otomatik vermesi güzel olurdu
    Örneğin bağlı listedeki sonraki işaretçinin next olarak tanımlanması kolay olmalı
    Tüm GitHub'ı indirip kodda yerleşimi ve etkileşimi en çok benzeyen değişkenleri bulmak, güven yeterince yüksekse de o adı kullanmak mümkün görünüyor

    • Eskiden böyle şeyleri elle yapmaya çalışmıştım
      Örneğin indüksiyon değişkeni tespit edilirse adını i yapmak gibi
      Ama bugün bunun doğru yolunun LLM kullanmak olduğu oldukça açık görünüyor
      Ancak şu aşamada biz daha çok sağlam temeli kuran kişileriz; temel hazır olduğunda hazır modellerle adları değiştirmek veya yorum eklemek nispeten kolay
      Esas nokta, %100 doğruluk gerektiren zor decompile işini bizim yapmamız; adlar ve yorumlar gibi yaklaşık sonuçların kabul edilebilir olduğu kısımlarda ise LLM'i devreye alabilmemiz
      Her hâlükârda ad değiştiren script yazmak oldukça kolay, belgeler için buraya bakabilirsiniz: https://docs.rev.ng/user-manual/model-tutorial/
    • Gerçekten harika olurdu; http://jsnice.org/ gibi bir his veriyor
      JSNice'ın içeride ne yaptığını açıklayan makale: https://files.sri.inf.ethz.ch/website/papers/jsnice15.pdf
    • Binary Ninja'nın sidekick'ine benziyor
    • Tersine mühendislik için GitHub Copilot gibi bir şey mi?
  • Benim ELF dosyamda çalışmıyor
    ./revng artifact --analyze --progress decompile-to-single-file ../maytag.ko komutunu çalıştırınca Only ELF executables and ELF dynamic libraries are supported mesajı çıkıyor; dosya ise ELF 64-bit LSB relocatable, x86-64, version 1 (FreeBSD), not stripped olarak görünüyor
    FreeBSD ikililerini desteklemiyor mu?
    Düzeltme: Kernel modüllerini desteklemediğini kaçırmışım; FreeBSD’den ziyade bunun basit bir çalıştırılabilir dosya olmamasından kaynaklanıyor gibi

    • GitHub’da bir issue açıp ikili dosyayı ekleyebilir misin?
      Bunu yüklemek o kadar zor olmayacak gibi
  • İş birliği iş akışına çok ilgi gösterilmesini isterim
    IDA Teams gibi şeyleri denemedim, ama Google Docs gibi sürtünmesiz bir tersine mühendislik deneyimi mümkün olursa harika olur

    • Hedefimiz bu
      Eskiden UI tabanlı olarak QtCreator kullanıyorduk; berbat bir seçimdi
      Sonra VSCode’a geçtik ve tesadüfen tarayıcıda da çalıştırılabiliyordu
      Bu yüzden biraz Kubernetes de katarak, tamamen bağımsız sürümle birebir aynı kullanıcı deneyimine sahip bir bulut decompiler geliştirdik
      İş birliği kısmının hâlâ daha fazla QA’ya ihtiyacı var, ama temelde çalışıyor
      Yapısı çok basit: bir daemon, birden çok client
      Sanırım eskiden CTF’lerde sunucunun X oturumu üzerinde birden fazla IDA penceresi ve birden fazla imleçle “iş birliği” yapma deneyiminden ilham aldık. Çok lanetli bir yöntemdi ama işe yarıyordu
  • Tip çıkarımı destekleme planınız var mı?
    Şu anda tüm değişkenler generic64_t gibi görünüyor; Ghidra gibi tipleri otomatik algılasa iyi olurdu. Elbette Ghidra da bazen yanılıyor

  • İlginç görünüyor
    Tamamen bağımsız sürümü denemek isterim
    Yaklaşık fiyat hakkında bir haber var mı? Hobi kullanıcılarının da karşılayabileceği düzeyde olursa iyi olur

  • İkili dosya hackleme araçlarının artması her zaman sevindirici
    Kendim de denemek isteyebileceğim için, seçilen paketleme biçimi hakkında fazlasıyla ayrıntılı bir öneri bırakıyorum
    source ./environment iyiye işaret değil. tar dosyasını indirince gerçekten PATH dâhil birkaç ortam değişkeni ayarladığını gördüm; neyse ki LD_LIBRARY_PATH değildi
    Çoğu HARD_ önekiyle başlıyor; muhtemelen size özgüdür ama REVNG daha açık görünür, mevcut ortam değişkenleriyle çakışması kötü olur
    AWS_EC2_METADATA_DISABLED="true" da ayarlanıyor; AWS kullanmadığım için bende bozmuyor ama genel olarak şüpheli duruyor
    RPATH_PLACEHOLDER, HARD_FLAGS_CXX_CLANG, uzun PATH, mingw32/gentoo/mips dizgeleri vb. kırılgan görünüyor
    Çalıştırma talimatlarında “şimdi ortam değişkenlerini değiştirin” yazıyorsa genelde vazgeçiyorum; bu, Ubuntu dışı sistemlerde düzgün çalışmayan programlarla güçlü biçimde ilişkili
    Uygulamanın denetim akışını çalışma ortamına bağlamak, ilk bakışta göründüğünden daha fazla hata modu doğurur ve global değişkenlere çok benzer
    Clang, derleme sırasında -DCLANG_DEFAULT_CXX_STDLIB=libc++ gibi varsayılanları içine gömebilir; DEFAULT_SYSROOT da kullanışlıdır
    rpath kullansanız bile, kullanıcı LD_LIBRARY_PATH ayarlı halde çalıştırırsa ikilinin DT_RUNPATH değeri ezilebilir
    Günümüzde -Wl,rpath aslında rpath değil, daha az kullanışlı olan runpath anlamına geliyor; muhtemelen istediğiniz çağrı -Wl,rpath -Wl,--disable-new-dtags, böylece yükleyici kütüphane ararken LD_LIBRARY_PATH değerini yok sayar
    Clang derleme bayrakları, statik linkleme ve ikili içinde ikili gömme gibi şeylerin birleşimiyle ortam değişkeni manipülasyonunu tamamen ortadan kaldırmak büyük olasılıkla mümkün
    clang-16 ikilisinin dinamik linklenmiş olması ve çalışma zamanında libLLVMAArch64CodeGen.so.16 gibi şeyleri araması da hata modlarını artırıyor
    LLVM_BUILD_STATIC=ON, HPC modül araç zincirinin etkin olduğu ortamlarda yanlış kütüphaneyi çekme sorununu azaltabilir
    Araçlar libc++.so, libc++abi.so vb. dosyalara linklenmiş; statik libc++ düşünmeye değer, en azından libc++abi ve libunwind’ı libc++ içine statik linklemek daha iyi olur
    Linux’ta dinamik linkli program dağıtmaya sabrım tamamen tükendi
    README’deki source ourhack ya da modül sisteminin bıraktığı ortam değişkenleri uygulamamın çalışma zamanı kütüphanelerini değiştirirse kullanıcı deneyimi ve sonraki hata raporu maliyeti korkunç olur
    Buna kıyasla statik linkleme gerçekten harika

    • Ortamı kurcalamayla ilgili kaygıların çoğu aslında yalnızca source environment yapılacağı varsayımı altında geçerli
      Aslında bunu önermemizin nedeni yalnızca demo ikilileri için dağıttığımız GCC’nin kullanılmasını sağlamaktı; amaçlanan kullanım biçimi ./revng betiği
      Bu durumda ortam değişiklikleri yalnızca revng çağrısını etkiler
      Belgeler burada: https://docs.rev.ng/user-manual/working-environment/
      source ./environment hakkında bir uyarı eklemek iyi olur
      LD_LIBRARY_PATH kullanmamak için çok zaman harcadık ve her ELF’nin bağımlılıklarını göreli yollarla referansladığı tamamen kendi kendine yeterli bir ikili seti oluşturduk. LD_LIBRARY_PATH kötülüktür
      HARD_ değişkenleri yalnızca derleyici wrapper’ında kullanılıyor ve gerçekten çakışma olasılıklarının çok düşük olduğunu düşünüyorum
      AWS_EC2_METADATA_DISABLED="true" için asıl tartışma https://github.com/revng/revng/pull/309#discussion_r12805759... adresinde
      AWS SDK’yı yamalayarak bundan kaçınmak mümkün olabilir ama her hâlükârda yalnızca rev.ng bulutta çalıştırıldığında etkisi var
      RPATH_PLACEHOLDER ve HARD_FLAGS_CXX_CLANG, revng’nin çevirdiği ikilileri linklerken kullanılıyor; uçtan uca ikili çeviriyle ilgilenmiyorsanız önemli değiller
      Biz bilinçli olarak DT_RUNPATH istiyoruz. DT_RPATH kullanım dışına çıkarılmak üzere ve LD_LIBRARY_PATH ile bizim kütüphanelerimizi değiştirmeniz gereken kullanım senaryoları olabilir
      “Ortam manipülasyonu” eleştirisinin yalnızca özel olmayan ortam değişkenleri söz konusu olduğunda geçerli olduğunu düşünüyorum
      RPATH_PLACEHOLDER, HARD_*, REVNG_* özel değişkenler ve hepsi ikili çeviri amacıyla var
      Bunları daha dar kapsamlı bir derleyici wrapper’ının içine itebiliriz ama Python’u da birlikte dağıttığımız için ortamı tamamen ortadan kaldıramayız
      Clang’e bazı bayrakları gömmek tek başına yeterli değil. Bu bayraklar linker’ı da etkiliyor ve wrapper işlevlerinin basitçe yerleşik hâle getirilemeyecek kısımları var
      Yine de bunları daha özel bir konuma taşıyabiliriz
      Dinamik linklemeye temkinli yaklaşıyor gibisiniz; biz buna emek verdik ve artık oldukça iyi çalışıyor, her zaman doğru konumu buluyor
      Mutlak yolları hardcode etmiyoruz, ikiliyi “yamalamak” gibi bir kurulum adımı da yok. Arşivden çıkarılan dizin istenen yere taşınabilir
      Kullandığımız çözüm LD_LIBRARY_PATH kullanmıyor; tüm ikililer $ORIGIN üzerinden birbirlerini sağlam biçimde referanslıyor
      ./root/bin/python ./root/bin/revng artifact --help çalıştırırsanız çalıştığını görürsünüz
      Tekrar söyleyeyim, source environment neredeyse yalnızca demo amaçlı; gerçek kullanımda sadece ./revng çalıştırırsanız ortam olduğu gibi kalır
      Python’u da birlikte dağıtıyoruz ama onu kullanmak zorunda değilsiniz. ./revng kullanabilir veya daemon modunda ağ üzerinden etkileşime geçebilirsiniz
      Yaklaşım, istediğiniz betikleme aracıyla YAML proje dosyasını ayrıştırıp değiştirdikten sonra ./revng artifact çağırmak ya da daemon ile etkileşime geçmek: https://docs.rev.ng/user-manual/model-tutorial/
      Sonuç olarak biz güncel Python sürümünü kullanıyoruz, kullanıcı da istediği dili kullanabiliyor

İleride, çeşitli Python sürümleriyle uyumlu yardımcı bir wrapper’ı PyPI’da sunmayı planlıyoruz
Özetle source ./environment yapmayın, ./revng kullanın
Birilerinin bu tür ayrıntılara önem vermesine sevindim
Bir sonraki büyük iterasyonda nix + mount namespace’i devreye alıp root yetkisi olmadan /nix/store kullanılmasını sağlayarak birçok şeyi basitleştirebiliriz
Bu tür tartışmaları burada değil de Discord sunucusunda yapmak daha iyi olabilir

  • Tebrikler
    QEMU TCG'ye lifting işini emanet ettiğiniz için pişmanlığınız var mı, yoksa iyi çalıştı mı?
    • Çok iyi çalıştı. İki pişmanlığımız var
      Birincisi, QEMU fork'umuzu birkaç yıl boyunca rebase etmediğimiz için kötü bir duruma düştük
      Yine de tam bugün ekipten biri en güncel QEMU ile lifting yapmayı başardı ve QEMU'ya destek eklenmesine yardımcı olduğumuz Qualcomm Hexagon kodunu da lift edebildi
      Sonuçta ilk düzgün Hexagon decompiler biz olacağız
      İkincisi, QEMU'ya fazla odaklandığımız için front-end QEMU ile sıkı biçimde birleşti
      Artık QEMU tabanlı olmayan ek front-end'leri desteklemek biraz çaba gerektirecek, ama imkânsız değil
      Tasarladığımız şey, kullanıcı yeni bir mimari desteği eklerken yalnızca C ile CPU durum yapısını ve onun üzerinde çalışan birkaç fonksiyonu tanımlasın
      İç temsili öğrenmesine gerek kalmasın
      Özetle QEMU harika bir tercihti; o kadar iyi çalıştı ki kod tabanının o kısmına uzun süre dokunmadık ve teknik borç birikti, ama şimdi bunu çözüyoruz