3 puan yazan GN⁺ 2023-12-24 | 1 yorum | WhatsApp'ta paylaş

xmas.c kod analizi

  • 1988'de yazılan xmas.c adlı C kodu, Uluslararası Obfuscated C Kod Yarışması'nı kazandı.
  • Bu kod, kendi çıktısından daha küçük boyutta olup metin sıkıştırma standartlarına yeni bir yön önerdi.
  • Kod derlenip çalıştırıldığında parametre olmadan çalışır ve ilginç biçimde daktilo tuşlarına rastgele basılmış gibi görünür.

Kodun çıktısı

  • Kod çalıştırıldığında "Noel'in On İki Günü" şarkısının sözleri yazdırılır.
  • Çıktı, Noel'in birinci gününden on ikinci gününe kadar verilen hediyeleri sıralayan sözlerden oluşur.

Analiz

  • Kodu anlamak için onu daha okunabilir bir biçimde yeniden yazmak gerekir.
  • Yeniden yazım sürecinde, belirli dizgeler kullanılarak bir yerine koyma şifresinin çözüldüğü ortaya çıkar.
  • t değişkeni, özyinelemenin yönünü kontrol etmede önemli bir rol oynar.
  • Kod, özyineleme yoluyla yerine koyma şifresini çözer ve Noel şarkısının sözlerini yazdırır.

Basitleştirme

  • Program anlaşıldıktan sonra, bazı döngüler ve C string kütüphanesi işlevleri kullanılarak kod basitleştirilebilir.
  • Sonunda kod öyle sadeleştirilebilir ki yalnızca şarkı sözlerini yazdıran bir hale indirgenir.

GN⁺ görüşü

  • Yaratıcılığın zirvesi: xmas.c kodu, yerine koyma şifresi ve özyineleme kullanarak obfuscated kod yazmanın mükemmel bir örneğidir. Bu, programlamada yaratıcılığın nasıl ifade edilebileceğini gösterir.
  • Eğitsel değer: Kodu analiz etme ve anlama süreci, başlangıç seviyesindeki yazılım mühendisleri için programlama becerilerini geliştiren iyi bir alıştırma olabilir.
  • Eğlence ve ilgi: Bu kod, programlamanın eğlenceli yönünü keşfetmek ve karmaşık problemleri çözmenin keyfini yaşamak için bir fırsat sunar.

1 yorum

 
GN⁺ 2023-12-24
Hacker News yorumları
  • TeX dünyasında benzer bir örnek olarak xii.tex var:

    • TeX belgesine karmaşık görünen bir kod koyup pdftex çalıştırdığınızda, beklediğinizden farklı bir sonuç elde edebiliyorsunuz. Buna shreevatsa.net üzerinden bakılabilir.
  • Bu kod, Kolmogorov karmaşıklığını akla getiriyor:

    • Anlaşılması zor bir kodun istenen sonucu ürettiğini görünce, aynı sonucu veren daha kısa bir program olup olmadığı ve bunun nasıl bulunabileceği merak uyandırıyor.
  • İlk yayımlandığında bu kodu almıştım ama dosya adı farklıydı:

    • carol.c adıyla kaydedilmişti ve modern bir sistemde derleyip çalıştırınca derleyici uyarı mesajları verdi.
  • IOCCC (International Obfuscated C Code Contest) 2023'te de hâlâ aktifti:

    • IOCCC hakkında harika bir açıklama var; buna www.ioccc.org adresinden bakılabilir.
  • Uyarıları kapatırsanız modern kod deposunda (trunk) da çalışıyor:

  • Rosetta Code'da da benzer bir çalışma var:

    • Giderek uzayan "Old Lady Swallowed a Fly" şarkısını yinelemeli olarak üreten bir program örneği bulunuyor. Buna rosettacode.org adresinden bakılabilir.
  • Üniversitenin son döneminde hocamın bu kod parçasını dersin başında göstermesine dair güzel bir anım var:

    • 2022'de hocamın dersinde bu kodla ilk kez karşılaşma deneyimimi hatırlatıyor.
  • Üniversite yıllarında C diliyle ilgili basılı ders materyallerinde bu kod vardı; bir kez kendim yazmıştım:

    • C öğrenirken bu kodu gerçekten elle girmenin akılda kalan bir deneyim olduğunu hatırlıyorum.
  • Bu kod, C dilinin çok eski bir sürümünü kullanıyor:

    • main fonksiyonunun imzası eski K&R stilini kullanıyor; bu yüzden bugün artık derlenmeyeceğini söyleyen bir görüş var.
  • IOCCC'de Larry Wall'un iki kez kazanmış olması ile onun Perl'ü tasarlamış olması arasındaki bağlantı, ilginç noktalardan biri:

    • Perl'ün tasarımcısının IOCCC'de ödül almış olması, dilin özelliklerini açıklıyormuş gibi bir izlenim veriyor.