Bir C ++ programının derleme kodunu nasıl görebilirim?
Bunu yapmak için kullanılan popüler araçlar nelerdir?
Bir C ++ programının derleme kodunu nasıl görebilirim?
Bunu yapmak için kullanılan popüler araçlar nelerdir?
Yanıtlar:
Programı kendiniz oluşturuyorsanız, derleyicinizden assembly kaynağı vermesini isteyebilirsiniz. Çoğu UNIX derleyicisi için -S
anahtarı kullanın .
GNU assembler'ı kullanıyorsanız, ile derleme, -g -Wa,-alh
stdout'ta birbirine karıştırılmış kaynak ve montaj sağlar ( -Wa
derleyici sürücüsünden seçenekleri assembler'a iletmesini ister -al
, montaj listesini açar ve -ah
"yüksek seviyeli kaynak" listesini ekler):
g++ -g -c -Wa,-alh foo.cc
Visual Studio için kullanın /FAsc
.
İkili derlediyseniz,
objdump -d a.out
UNIX'te kullanın (cygwin için de geçerlidir),dumpbin /DISASM foo.exe
Windows'ta.Hata ayıklayıcılar aynı zamanda yıkıcı bir şekilde de gösterebilir.
disas
GDB'de komut kullanın ,GCC / G ++ 'da -S
,. Bu something.s
, montaj kodunu içeren bir dosya çıkaracaktır .
Düzenleme: Çıktının Intel sözdiziminde olmasını istiyorsanız (ki bu IMO'dur, çok daha okunabilirdir ve çoğu derleme öğreticisi onu kullanır), ile derleyin -masm=intel
.
-fverbose-asm
seçenek ekle
Visual Studio'da ;
Bu site şu anda benim için çalışıyor (2017): https://godbolt.org/
Bir çok insan belirli bir derleyici ile montaj kodunu nasıl yayınlayacağını zaten anlattı. Diğer bir çözüm ise bir nesne dosyasını derlemek ve objdump , readelf (Unix üzerinde) veya DUMPBIN ( link ) (Windows'ta) . Ayrıca bir yürütülebilir dosyanın dökümünü de atabilirsiniz, ancak çıktıyı okumak daha zor olacaktır.
Bu, herhangi bir derleyici ile aynı şekilde çalışma avantajına sahiptir.
Kullandığınız hata ayıklayıcının bir derleme görünümüne (Visual Studio, Borland IDE, gdb, vb.) Sahip olması gerekir. Bir hata ayıklayıcı kullanmıyorsanız ve yalnızca bir programda hangi derlemenin olduğunu görmek istiyorsanız, bir dağıtıcı kullanabilir veya alternatif olarak programı çalıştırabilir ve bir hata ayıklayıcı ile ona ekleyebilir ve döküm işlemini buradan yapabilirsiniz. Seçenekler hakkında bilgi için sökücü referanslarına bakın .
Başka birinin bahsettiği gibi, platformunuzun hata ayıklayıcısı iyi bir başlangıç noktasıdır. Tüm hata ayıklayıcıların ve parçalayıcıların matkap için IDA Pro'ya bir göz atın .
Unix / Linux platformlarında (Cygwin dahil) kullanabilirsiniz objdump --disassemble <executable>
.
Çoğu derleyicinin bir derleme listesi çıktısı alma seçeneği vardır. Örneğin, VisualStudio ile aşağıdaki gibi bir şey kullanabilirsiniz:
cl.exe /FAfile.asm file.c
Yine de en iyi okunabilirlik için, çoğu hata ayıklayıcı, sökme işlemini orijinal kaynakla harmanlayan bir görünüm sunacaktır, böylece kodunuzu derleyicinin çıktısıyla satır satır karşılaştırabilirsiniz.
32 bit PE dosyaları için PE Explorer Disassembler . Diğerleri için IDA.
Bu siteyi de deneyebilirsiniz: http://assembly.ynh.io/
Orada, C veya C ++ kodunuzu yapıştırabilir ve montaj eşdeğer sürümünü görmek için mavi bir düğmeye basabilirsiniz.
Visual Studio'da bir C ++ projesi için derleyici listesini oluşturabilirsiniz.
Proje özelliklerine gidin, ardından C ++ / Output Files'a gidin ve Assembler Output ayarını ve ASM liste konumunu bir dosya adına ayarlayın.
Eclipse kullanıcısıysanız, Demontaj görünümünü kullanabilirsiniz .
Demontaj görünümü, yüklenen programı, karşılaştırma için kaynak koduyla karıştırılmış montajcı talimatları olarak gösterir. Halihazırda yürütülmekte olan çizgi bir ok işaretiyle belirtilir ve görünümde vurgulanır. Sökme görünümünde aşağıdaki görevleri yapabilirsiniz:
- Herhangi bir assembler talimatının başlangıcında kesme noktaları ayarlayın
- Kesme noktalarını etkinleştirin ve devre dışı bırakın ve özelliklerini ayarlayın
- Programınızın sökme talimatlarında ilerleyin
- Programdaki belirli talimatlara geçin
Alt +8