Nesne dosyalarıyla veya çalıştırılabilir dosyalarla çalıştığınızda farklı durumlar olabilir. Bu tür senaryolar dosyanızdaki sembolleri kontrol etmenizi gerektirebilir. Linux'ta, nesnenizdeki veya çalıştırılabilir dosyanızdaki mevcut semboller hakkında bilgi görüntülemek için 'ad' komutunu kullanabilirsiniz.
Man sayfasına göre “nm” komutu “nesne dosyalarındaki sembolleri listelemek” için kullanılıyor. Aynı komut yürütülebilir dosyalarda da çalışır ve bunu bugün ayrıntılı olarak tartışacağız.
Farklı Örnekler Kullanarak Linux Nm Komutunu Anlamak
“Nm” komutu bazı Linux dağıtımlarında önceden kurulu olarak gelmez. Yüklü olup olmadığını görmek için sürümünü aşağıdaki komutla kontrol etmeyi deneyin:
$ nm --versiyon
Aşağıdakine benzer bir çıktı alırsanız “nm” kurulu değil demektir:
Bu yüzden aşağıdaki komutla “apt” kullanarak kurun. İstendiğinde “y” tuşuna basarak işlemi onayladığınızdan emin olun:
$ sudo uygun düzenlemek binutils
Artık sürümünü tekrar kontrol ederek “nm”nin sisteminizde mevcut olduğunu doğrulayabilirsiniz.
Artık Linux sisteminize “nm”yi başarıyla yüklediniz. Bir sonraki şey, hedef nesne dosyalarınızla ilgili bilgi almak için onu nasıl kullanacağınızı öğrenmektir.
Örnek 1: Nm Komutunu Çalıştırma
“Nm” ile çalıştırdığınızda komut, yürütülebilir bir nesne dosyası olan “a.out” adlı dosyayı arar. Bulunursa, içerdiği sembolleri görüntüler.
$ nmAncak mevcut dizinde böyle bir dosyanız yoksa aşağıdaki görüntüdeki gibi bir çıktı alacaksınız:
Bir C++ dosyası oluşturalım ve ardından onu g++ kullanarak derleyelim. Bunu yaptığımızda “nm” komutuyla kullanabileceğimiz bir “a.out” dosyası elde ediyoruz.
“nm” komutunu tekrar çalıştırdığımızda nesne dosyamızdaki tüm sembolleri gösteren bir çıktı elde ettiğimize dikkat edin. “Nm” komutları bu şekilde çalışır.
Örnek 2: Belirli Sembollerin Görüntülenmesi
Nesne dosyanızda belirli bir sembolü bulmak mümkündür. Bizim durumumuzda olduğu gibi yalnızca bir nesne dosyanız varsa ve “ana” sembolü bulmak istiyorsanız komutunuzu aşağıdaki gibi çalıştırın:
$ nm -A a.dışarı | kavramak ana
Ancak birden fazla nesne veya yürütülebilir dosyanız varsa komutunuzu aşağıdaki gibi görünecek şekilde değiştirin:
$ nm -A * .dışarı | kavramak anaÖrnek 3: Tanımsız Sembolleri Görüntüleme
“-u” seçeneği ile nesne dosyanızda sadece tanımlanmamış sembolleri elde etmeniz mümkündür. Komutu çalıştırırken “-u” seçeneğini eklediğimiz bir örnek:
$ nm -içinde a.dışarıAldığımız çıktının daha küçük olduğunu ve bunun nedeninin tüm sembollerin değil, yalnızca tanımsız olanların görüntülendiğini unutmayın.
Örnek 4: Bir Sembolün Boyutunu Görüntüleme
Belirli bir sembolü arayabilir ve boyutunu görüntüleyebilirsiniz. Bunun için “-s” seçeneğini kullanın. Bizim durumumuzda “abi” nesnesini arayalım ve ne elde ettiğimize bakalım.
$ nm -S | kavramak abiYalnızca arama kriterlerinizle eşleşen semboller ve boyutları görüntülenir.
Örnek 5: Dinamik Sembolleri Alma
“-D” seçeneği çıktıda yalnızca dinamik sembollerin görüntülenmesi gerektiğini belirtir. Aşağıdaki görselde “-D” ekledikten sonra sadece dinamik semboller yazdırıldığı için çıktımızın daraldığını görebiliriz:
Örnek 6: Çıktı Formatını Değiştirme
“Nm” tarafından kullanılan varsayılan çıktı formatı “bsd”dir. Ancak “-f” seçeneğini kullanarak farklı bir format belirleyebilirsiniz. Örneğin posix formatını kullanmak istiyorsak “nm” komutumuzu aşağıdaki gibi çalıştırıyoruz:
$ nm -F posix a.out
Örnek 7: Bir Dosyayla Çalışmak
Kullanmak istediğiniz her seçeneği terminalde “nm” komutuyla belirtmek yerine bir dosya kullanabilirsiniz. Dosya seçenekleri içerir ve dosyayı “nm” komutunu çalıştırırken eklersiniz. Komut, dosyadaki tüm seçenekleri kontrol eder ve gerekli eylemi gerçekleştirir.
İşte “-g –size-sort” seçeneğini içeren “file1” adlı bir dosya örneği.
Dosyaya başvurmak için komutu aşağıda gösterildiği gibi çalıştırın:
$ nm @ dosya1Komut çalıştığında istediğiniz çıktıyı alacaksınız. Bu durumda sembolleri sıralayıp dış sembolleri almak için “-g” seçeneğini ekliyoruz ve gerisini yok sayıyoruz.
Çözüm
“Nm” komutu kullanıcıların sembollerle çalışmasına olanak sağlar. Bir yürütülebilir dosya veya nesne dosyasındaki tüm sembolleri görüntülemek için bu komutu kullanabilirsiniz. Bu yazı “nm” komutunu açıkladı. Ayrıca komutu kullanırken rahat olmanız için farklı örnekler de verdik. Umarım “nm” komutu artık açıktır.