Buffer Adresi (rsi)
Coddy'nin Assembly Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 37 / 45.
write sistem çağrısında, çıktıyı nereye göndereceğini işletim sistemine bildirdikten sonra (rdi içindeki dosya tanımlayıcısı), ona ne yazdıracağını söylemen gerekir. Bunu, bellekteki dizenin adresini ileterek yaparsın.
Tampon adresi için kullanılan yazmaç rsi'dir.
Tampon nedir?
Tampon, verileri tutan bir bellek bloğudur. Bizim durumumuzda tampon, yazdırmak istediğimiz dizgedir.
Neden değerin kendisi değil de adresi?
write sistem çağrısının, dizenin bellekte nerede başladığını bilmesi gerekir. rdx içinde belirttiğiniz uzunluğa ulaşana kadar bu adresten baytları okur. Gerçek karakterleri sistem çağrısına göndermezsiniz. Konumlarını gönderirsiniz.
Örnek:
section .data
msg db 'Hello', 0x0a
section .text
mov rsi, msg ; rsi, msg adresini tutarmsg gerçekte nedir:
msg bir etikettir. Assembler bunu bir sayıyla değiştirir: 'Hello' dizgesinin saklandığı bellek adresi. mov rsi, msg yazdığında, bu adres numarasını rsi içine koyarsın.
Adresi unutursanız ne olur?
rsi değerini ayarlamazsanız, yazmaçta önceden orada bulunan rastgele veriler kalır. İşletim sistemi rastgele bir bellek adresinden okumaya çalışır ve bu büyük olasılıkla bir segmentasyon hatasına (çökme) neden olur.
write sistem çağrısıyla eksiksiz örnek:
section .data
msg db 'Hello', 0x0a
len equ $ - msg
section .text
mov rax, 1 ; write sistem çağrısı
mov rdi, 1 ; stdout
mov rsi, msg ; dizgenin adresi
mov rdx, len ; bayt sayısı
syscallGörev
Sana, değer olarak 'Hi' ve ardından bir yeni satır içeren greeting adlı bir dizge veriliyor. greeting adresini rsi içine yükleyen kod satırını yaz.
Yalnızca rsi için mov yönergesini yaz.
Kendin dene
section .text
global _start
_start:
%include "solution.asm"
mov rax, 1
mov rdi, 1
; Adres zaten rsi içinde (öğrencinin kodundan)
mov rdx, greetingLen
syscall
mov rax, 60
mov rdi, 0
syscallBu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temel Bilgiler bölümündeki tüm dersler
Kendi başına pratik yap: Assembly playground