BİLGİ SAYAMIYORUM beta

C++ ya da C ile yazdığınız kodun, Assembly çıktısını yani yazılı makine kodu halini nasıl görebilirsiniz?

0

Muhtemelen çok sık karşılaşacağınız bir dil değildir Assembly. Ama bilgisayarda yaptığınız işlemler mesela yazdığınız kodlar microcode gibi devresel bir dile(!) çevrilmeden önce makine koduna kadar getirilir, makine kodunun da yazılı hali Assembly dir. Daha doğrusu en düşük seviyede kod yazmak isterseniz Assembler/Toplayıcı (: kullanmalısınız ki o da son tercümeyi yapar. Eğer C ya da C++ ile kod yazmanın farklı yanlarını incelemeye başladıysanız, belki bu soru benim gibi sizin de aklınıza gelir; yazdıklarımın assembly halini görebilir miyim? Evet ve açıkçası zaten düşük seviye bir dilde kod yazdığınız için anlamanız bile çok zor olmayabilir. Bu işlem için gcc/g++ derleyicilerini kullanıyoruz, diyelim ki "kemal.cpp" adında bir C++ dosyanız var ve bu dosya içindeki kodların assembly çıktısını görmek istiyorsunuz:

     g++ -S kemal.cpp

     g++ -S -o kemalassembly.s kemal.cpp

İlk satır kemal.c dosyasındaki kodun çıktısını önişlemci ile çalıştırıp, assembler ile işleme sokmadan aynı isimde yani kemal.s ile yeni bir dosya oluşturur, bu dosyada assembly çıktısını bulabilirsiniz. İkinci satır ise bu dosyayı başka bir isimle kaydetmek için. Başlardaki g++ leri gcc yaparak C kodu için de aynı şeyi yapabilirsiniz. Eğer çıkarttığınız assembly kodunun yazdığınız kod ile beraber çıkmasını yada da daha detaylı çıkmasını istiyorsanız, şu başka örnekleri de kullanabilirsiniz:

     g++ -g -O0 -c -fverbose-asm -Wa,-adhln kemal.cpp > kemalassembly.lst

     g++ -g -O -Wa,-aslh kemal.cpp > kemalassembly.txt

Bu iki satırda biraz farklı olarak, yazdığınız kodu satırlarla ve işlemlerle ilgili detaylı bilgi vererek assemblye çevirir ve sondaki > ile sonucu listeli olarak istediğiniz dosyaya çıkartırlar.

Diyelim ki elinizde mehmet adlı uygulanabilir dosya var ve kodu elinizde olmamasına rağmen bu dosyanın assembly halini incelemek istiyorsunuz. Açıkçası bu çok kolay değil, öncelikle terminaldeyken "file" ile dosyanın debugging e (hata ayıklama) açık olup olmadığına, üstünde ekstra bir sıkıştırma işlemi yapılıp yapılmadığına bakmalısınız. Sonra "objdump" ile dosyayı ayrıştırıp "mehmetneyapar.dump" adlı bir dosyaya içini dökerek, nasıl çalıştığını incelemeyi deniyebilirsiniz:

     file mehmet

     objdump -S --disassemble mehmet > mehmetneyapar.dump

BENZER 7

Kimse etkileşime girmemiş

ETİKETLER