Assembly Playground
Kod parçacıklarını yazın, çalıştırın ve paylaşın - kurulum gerekmez.
Assembly'yi tarayıcınızda çevrimiçi çalıştırın
Bu, NASM söz dizimiyle yazılmış x86-64 kodu için ücretsiz bir çevrimiçi Assembly derleyicisidir. Programınızı yazın, Çalıştır'a basın; Coddy onu nasm -f elf64 ile derler, ld ile bağlar ve ortaya çıkan Linux çalıştırılabilir dosyasını sunucu tarafında çalıştırır, ardından size stdout, stderr ve çıkış durumunu gösterir. Kurulacak hiçbir şey yok: NASM yok, bağlayıcı yok, sanal makine yok, çapraz derleyici yok.
Başlangıç programı, standart girişten bir satır okuyan ve ham read, write ve exit sistem çağrılarını kullanarak bir selam geri yazan eksiksiz bir _start giriş noktasıdır, libc yok. Assembly gerçekten böyle çalışır: argümanları rax/rdi/rsi/rdx içine taşırsınız, syscall çağırırsınız ve gerisini çekirdek halleder. Her Çalıştırmada programınıza girdi vermek için düzenleyicinin altındaki stdin panelini kullanın, tıpkı gerçek bir ikili dosyaya veri yönlendirmek gibi.
Bu Assembly playground'unu yararlı kılan nedir
- Gerçek x86-64 NASM araç zinciri. Kaynağınız Linux'ta
nasm -f elf64ile derlenir veldile bağlanır; yerelde yazacağınız komutların aynısıdır, dolayısıyla burada çalışan şey gerçek bir makinede çalışanla eşleşir. - Doğrudan Linux sistem çağrıları. Başlangıç programı
read,writeveexit'i araya libc girmedensyscallkomutuyla kullanır, böylece kayıtçıların argümanları ve dönüş değerlerini tam olarak nasıl taşıdığını görürsünüz. - Standart giriş desteği. stdin paneli üzerinden programınıza bayt gönderin ve bunları sistem çağrısı 0 ile okuyun: klasik 'bir isim oku, bir selam yazdır' alıştırmaları ve ötesi için kullanışlıdır.
- Sıfır kurulum, anında geri bildirim. NASM kurulumu yok, hatırlanacak bağlayıcı bayrağı yok, izin hatası yok: sayfayı açın, düzenleyici hazır. Derleyici ve bağlayıcı hataları doğrudan çıktıya geri gelir.
Assembly playground'unda neler deneyebilirsiniz
- Tek bir
writesistem çağrısıyla sabit bir dize yazdırın, ardından temiz birexit(0)yapın: en küçük eksiksiz x86-64 programı ve_startilesyscall'ın nasıl bir araya geldiğini görmenin en hızlı yolu. - stdin'den bir
.bssarabelleğine okuyun, sondaki satır sonunu kırpın ve geri yankılayın: girdiye dayalı neredeyse her assembly alıştırmasının arkasındaki desen. - İki sayıyı kayıtçılarda toplayın ve sonucu elle ASCII rakamlarına dönüştürün, böylece onu
writeedebilirsiniz. Assembly'ninprintdiye bir şeyinin olmadığını, yalnızca baytlar ve sistem çağrıları olduğunu böyle öğrenirsiniz.
Çevrimiçi Assembly derleyici SSS
Bu playground hangi assembler'ı ve söz dizimini kullanır?
nasm -f elf64 ile derlenir ve ld ile bağlanır. AT&T/GAS söz diziminden geliyorsanız (%rax, movq tarzı), NASM'ın Intel tarzında yeniden yazın: mov rax, 1, section .text, global _start.Bunu kullanmak için NASM veya bir bağlayıcı kurmam gerekir mi?
Burada assembly'de girdiyi nasıl okurum?
read sistem çağrısını (numara 0) kullanın: rax'e 0 (sys_read), rdi'ye 0 (stdin), rsi'ye bir arabelleğin adresini ve rdx'e maksimum bayt sayısını koyun, ardından syscall çalıştırın. Düzenleyicinin altındaki stdin paneline ne yazarsanız, Çalıştırma sırasında programınıza iletilir. Başlangıç programı, sondaki satır sonunu kırpma dahil tüm deseni gösterir.Programım neden main yerine _start'a ihtiyaç duyuyor?
ld ile ve C çalışma zamanı olmadan bağlanır. main bir libc geleneğidir: C başlangıç kodu her şeyi hazırladıktan sonra onu çağırır. Sade bir ld bağlantısında libc yoktur, bu yüzden çekirdek doğrudan _start etiketine atlar; buradaki her programın global _start tanımlamasının nedeni budur. Sonunda exit sistem çağrısıyla (numara 60) temiz bir şekilde çıkmaktan siz sorumlusunuz.Yeni başlayan biri olarak bile bu derleyiciyle assembly öğrenebilir miyim?
Assembly için faydalı araçlar
Assembly Playground ile iyi çalışan, tarayıcı tabanlı ücretsiz araçlar - hepsi Coddy'nin bir parçası.