Forum
EkonoJIT, NormalJIT'de olduğu gibi MSIL aradiline dönüştürmeden .NET kütüphanesi gibi direkt native build yapmak istiyorum. PRE-JIT modunu nasıl aktive edebilriim ?
PRE JIT olarak değil ama Just in time debugger olarak aktif edilebilir. PRE den kastınızı biraz daha açarmısını
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
saygılarımla
ProfectSoft Yazılım ve Danışmanlık Hizmetleri
LogPusher & Bifyou E-Commerce System
www.profectsoft.com
-JIT'ten kaynaklı gecikmeleri azaltmak istiyorsanız uygulamanın girişinde aşağıdaki şekilde yapılabilir;
foreach (var type in Assembly.GetExecutingAssembly().GetTypes()) { foreach (var method in type.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static)) { System.Runtime.CompilerServices.RuntimeHelpers.PrepareMethod(method.MethodHandle); } }
-NGEN ile native çıktılar oluşturulabilir;
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = System.IO.Path.Combine(System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory(), "ngen.exe");
string assemblyPath = (new System.Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath.Replace("%20", " ");
// Vista&Win7&> kontrolü..
if (System.Environment.OSVersion.Version.Major >= 6)
process.StartInfo.Verb = "runas";
process.StartInfo.Arguments = "install \"" + assemblyPath + "\""; // NGEN
process.Start();
process.WaitForExit();
Teşekkür ederim öncelikle yanıtlarınız için her birinize üstatlar. Amacım şudur; beklemekten ziyade native C/C++ derlemesi gibi karanlık scope istiyorum. İstiyorum ki kod cpu'nun yerel makine diline dönüşsün. (microsoft intermedia language değil)
Şimdi kod güvenliği için (aslında kod değil telif hakları güvenliği için) insanların çalışmalarımı görmeleri konusunda (ki her şekilde analiz mümkün de) benim yazmış olduğum kaynak kodu okurken olabildiğince zorlanmalarını istiyorum. Telif haklarımı daha da güvence altına almak için ya .NET in kendi sınıflarına uyguladığı gibi (ki bu sınıflar nativeler. Aynı windows kernel gibi yani .net sınıfları CLR'a tabii değiller, bilakis CLR'da doğal olarak native ve hiçbir kişi ne .NET sınıflarını ne de CLR kodlarını asla göremez) ben de kendi yazdığım programı native olarak derlemek MSIL ara çıktısı almamak ve Common Language Runtime'a olabildiğince bağlı kalmamak istiyorum.
Bildiğiniz üzere PRE-JIT'in açıklaması aslında ön derleme diye geçer. Yani tüm program ihtiyaç duyulsa da duyulmasa da tüm komponentleri ile birlikte derlenir ve RAM'e yerleştirilir. Bilmem bu sadece çalışma zamanı ayarı mıdır (ki öyleyse pek işime yaramıyor ne yazık ki). Eğer çalışma zamanından evvel harddiskde saklanan programın biçimini de belirliyorsa (onu native hale getirip saklıyorsa) çok güzel bir seçenek.
Eğer bu çare olmazsa yazdığım birçok program modülümü C programı ile yazıp, C# tarafında memory management de dahil olmak üzere birçok CLR özelliğini kullanmayarak direkt C/C++ ile yazdığım native statik kütüphaneyi eski tip Win32 programlarında olduğu gibi pointer aracılığı ile kullanacağım.
Yani çok benimsenilmeyen hatta en hafif tabir ile belki de .NET tarafının en sevilmeyen ve hiç haz duyulmayan yanı olan "kodun görünürlüğü ve gizliliği" konusunda -ki kendi kütüphanelerini bunun dışında tutuyorlar akıllı adamlar- bir çare bulunması gerekiyor. .NET in getirdiği yeniliklere ve avantajlara karşılık bir dezavantaj olan bir durum bu.
Geleneksel .NET uygulamalarında (.NET Native UWP dışında) direkt native çıktı alamazsın.
.Net platformunda herhangi bir programlama dili ile (C#, VB.NET, F#...) yazılan uygulamalar derlendiğinde CLI koda çevrilir, yani C++ veya Delphi de olduğu gibi native code derleme esnasında oluşturulmaz. Bunun yerine JIT olarak adlandırılan tam zamanında derleme mekanizması kullanılır. Bu mekanizma kod ilk çağırıldığında CLI formundaki kodu üzerinde çalıştığı bilgisayarın konfigürasyonuna göre (CPU, vb.) en optimum biçimde native koda dönüştürür. JIT mekanizması bazı yönleri ile oldukça faydalıdır, örneğin JAVA da benzer bir yapı kullanır ve neredeyse her platform ve cihazda çalışabilmesinin kaynağı budur.
Eğer kodun görünmesini engellemek istiyorsan WinLicense, .Net Reactor vb. (*ücretli) uygulamalar bu konuda sana yardımcı olacaktır.
Daha maliyetsiz çözümler için Obfuscate yöntemini deneyebilirsin. Bu yöntem ile kodlar okunması ve takip edilmesi güç hale getirilir. Bu konuda Google’da “obfuscator c#” araması yaparak birçok ücretli veya ücretsiz aracı deneyebilirsin.
"-ki kendi kütüphanelerini bunun dışında tutuyorlar akıllı adamlar" Burada kastettiğin çekirdek .NET kütüphaneleri ise yanlış bilgiye sahipsin, tüm .NET kütüphaneleri kolaylıkla decompile edilebilir. Microsoft .NET kütüphaneleri için herhangi bir koruma kullanmaz!
Geleneksel .NET uygulamalarında (.NET Native UWP dışında) direkt native çıktı alamazsın.
.Net platformunda herhangi bir programlama dili ile (C#, VB.NET, F#...) yazılan uygulamalar derlendiğinde CLI koda çevrilir, yani C++ veya Delphi de olduğu gibi native code derleme esnasında oluşturulmaz. Bunun yerine JIT olarak adlandırılan tam zamanında derleme mekanizması kullanılır. Bu mekanizma kod ilk çağırıldığında CLI formundaki kodu üzerinde çalıştığı bilgisayarın konfigürasyonuna göre (CPU, vb.) en optimum biçimde native koda dönüştürür. JIT mekanizması bazı yönleri ile oldukça faydalıdır, örneğin JAVA da benzer bir yapı kullanır ve neredeyse her platform ve cihazda çalışabilmesinin kaynağı budur.
Eğer kodun görünmesini engellemek istiyorsan WinLicense, .Net Reactor vb. (*ücretli) uygulamalar bu konuda sana yardımcı olacaktır.
Daha maliyetsiz çözümler için Obfuscate yöntemini deneyebilirsin. Bu yöntem ile kodlar okunması ve takip edilmesi güç hale getirilir. Bu konuda Google’da “obfuscator c#” araması yaparak birçok ücretli veya ücretsiz aracı deneyebilirsin.
"-ki kendi kütüphanelerini bunun dışında tutuyorlar akıllı adamlar" Burada kastettiğin çekirdek .NET kütüphaneleri ise yanlış bilgiye sahipsin, tüm .NET kütüphaneleri kolaylıkla decompile edilebilir. Microsoft .NET kütüphaneleri için herhangi bir koruma kullanmaz!
O vakit belki de en mantıklısı çekirdek modülleri herbert schildt'ın dediği gibi C ile yazılması ve pointer ile kullanılması 🙁
.NET in sunduğu bazı kolaylıklardan ödün veriliyor o vakit ... String üzerinde işlemler bile adamı çileden çıkarıyor...
https://yck1509.github.io/ConfuserEx/ ile kodu okunmaz hale getirebilirsin.