C# Reflector Kullanımı
Daha önceki yazımızda bir programı derlediğimizde oluşan dll veya exe dosyasının CIL, metadata ve manifest bilgilerini içerdiğini ve bu bilgilere Visual Studio’nun bir tool’u olan idasm ile ulaşabileceğimizden bahsetmiştik. Bu yazıya buradan ulaşılabilir.
Reflector ise bu dll veya exe’yi kullanarak yazdığımız kodları göstermeye yarar. Yani elimizde bir dll veya exe var ise biz bu dll veya exe’nin oluşması için yazılan kodları görebiliriz. Şimdi bunu nasış yaptığını bir örnek ile inceleyelim
Burada bir Program bide Calc sınıfımız var ve örnek olarak Calc sınıfımızın içerisine Add metodu eklemişiz. Bakalım bu programı derlememiz sonucu oluşan exe’yi Reflector’le açarak bu Add metodunun içeriğine ulaşabilecek miyiz? Bunun için önce yukarıda linkini verdiğim yerden Reflector’u bilgisayarınıza indirmeniz gerekmektedir. Program kurulum gerektirmemektedir. Zip dosyasını açıp içerisindeki “Reflector.exe”’yi çalıştırmanız yeterlidir. İlk çalışmada hangi Freamwork versiyonu ile çalıştığınızı soracaktır. Siz içeriğini açmak istediğiniz dll veya exe hangi versiyonda yazılmış ise onu seçerek programı başlatabilirsiniz. Benim yazdığım yukarıdaki program .NET 4.0’da derlendiği için ben 4.0’ı seçip çalıştırdım. Ardından File –> Open sekmelerini tıklayıp yazdığım programın derlenmesi sonucu oluşan Calc.exe’yi bularak açtım.
sonucunda gördüğünüz gibi Calc sınıfımın içerisine tanımladığım Add metodunun içeriğine ulaştım. Bu birlikte çalışılan projelerde eğer diğer takım arkadaşınız sizin yaptığınız değişikliği ezdiyse ve siz ne yaptığınızı hatırlamıyorsanız onu geri almak için mükemmel bir program oluyor. Yani hayat kurtarıyor. Bunun dışında elinizde bir dll veya exe var onun içeriğini merak ediyorsanız yine tam size göre bir program.
Ayrıca yazılan kodları sadece C# olarak getirmiyor. Aşağıdaki listeden seçtiğiniz programlama diline göre assembly içeriği getirtmek mümkün.
Örneğin Calc.exe’yi açarken C# değilde Visual Basic seçseydim sonuç şu şekilde olacaktı :
Yani Reflector için okuyacağı assembly’in hangi dilde yazıldığı önemli değil. Çünkü daha öncede dediğimiz gibi bu okuduğu assembly CIL bilgisi içeriyor. Yani platforma bağlı olmayan evrensel bir bilgi .NET tabanlı her dilin derlenmesi sonucu oluşan bir bilgi. Bu yüzden Reflector’da ona okuması için verdiğiniz assembly’in bu CIL bilgisini derlemenin tersine bir işlem yaparak size vermektedir. Derlenince yazdığımız kodlar nasıl CIL’e dönüşüyorsa Reflector ile de CIL yazılan koda dönüşüyor. Böyle bir program yaptıkları için Reflector yazıcılarına teşekkür etmek lazım sanırım.
Reflector ise bu dll veya exe’yi kullanarak yazdığımız kodları göstermeye yarar. Yani elimizde bir dll veya exe var ise biz bu dll veya exe’nin oluşması için yazılan kodları görebiliriz. Şimdi bunu nasış yaptığını bir örnek ile inceleyelim
Daha önce C# CIL, Metadata, Manifest Kavramları ve “ildasm.exe” yazımızda kullandığımız şu örnek üzerinden gidelim :Not : Reflector Visual Studio içerisinde bulunan bir tool değildir. Buradan indirebilirsiniz.
// Calc.cs
using System;
namespace CalculatorExample
{
// This class contains the app's entry point.
class Program
{
static void Main()
{
Calc c = new Calc();
int ans = c.Add(10, 84);
Console.WriteLine("10 + 84 is {0}.", ans);
// Wait for user to press the Enter key before shutting down.
Console.ReadLine();
}
}
// The C# calculator.
class Calc
{
public int Add(int x, int y)
{ return x + y; }
}
}
Burada bir Program bide Calc sınıfımız var ve örnek olarak Calc sınıfımızın içerisine Add metodu eklemişiz. Bakalım bu programı derlememiz sonucu oluşan exe’yi Reflector’le açarak bu Add metodunun içeriğine ulaşabilecek miyiz? Bunun için önce yukarıda linkini verdiğim yerden Reflector’u bilgisayarınıza indirmeniz gerekmektedir. Program kurulum gerektirmemektedir. Zip dosyasını açıp içerisindeki “Reflector.exe”’yi çalıştırmanız yeterlidir. İlk çalışmada hangi Freamwork versiyonu ile çalıştığınızı soracaktır. Siz içeriğini açmak istediğiniz dll veya exe hangi versiyonda yazılmış ise onu seçerek programı başlatabilirsiniz. Benim yazdığım yukarıdaki program .NET 4.0’da derlendiği için ben 4.0’ı seçip çalıştırdım. Ardından File –> Open sekmelerini tıklayıp yazdığım programın derlenmesi sonucu oluşan Calc.exe’yi bularak açtım.
sonucunda gördüğünüz gibi Calc sınıfımın içerisine tanımladığım Add metodunun içeriğine ulaştım. Bu birlikte çalışılan projelerde eğer diğer takım arkadaşınız sizin yaptığınız değişikliği ezdiyse ve siz ne yaptığınızı hatırlamıyorsanız onu geri almak için mükemmel bir program oluyor. Yani hayat kurtarıyor. Bunun dışında elinizde bir dll veya exe var onun içeriğini merak ediyorsanız yine tam size göre bir program.
Ayrıca yazılan kodları sadece C# olarak getirmiyor. Aşağıdaki listeden seçtiğiniz programlama diline göre assembly içeriği getirtmek mümkün.
Örneğin Calc.exe’yi açarken C# değilde Visual Basic seçseydim sonuç şu şekilde olacaktı :
Yani Reflector için okuyacağı assembly’in hangi dilde yazıldığı önemli değil. Çünkü daha öncede dediğimiz gibi bu okuduğu assembly CIL bilgisi içeriyor. Yani platforma bağlı olmayan evrensel bir bilgi .NET tabanlı her dilin derlenmesi sonucu oluşan bir bilgi. Bu yüzden Reflector’da ona okuması için verdiğiniz assembly’in bu CIL bilgisini derlemenin tersine bir işlem yaparak size vermektedir. Derlenince yazdığımız kodlar nasıl CIL’e dönüşüyorsa Reflector ile de CIL yazılan koda dönüşüyor. Böyle bir program yaptıkları için Reflector yazıcılarına teşekkür etmek lazım sanırım.
Öncelikle anlatım için teşekkür ederim benim extra bir sorum olacak peki ya .Net değilse
YanıtlaSil