Merhaba ve tekrar hoş geldiniz.
Bu yeni bölümde, dize depolama, anlama, STOS B, STOS W ve STOS D için montaj talimatlarını
inceleyeceğiz.
STOS B, dize depolama baytı anlamına gelir.
String storage W string storage word içindir ve STOS D string storage dword içindir.
Bu, bir baytın saklanması, bir kelimenin saklanması (iki bayt), dört bayt olan bir dword'ün saklanması anlamına gelir.
İp talimatları.
Dize komutları, bayt dizeleri üzerinde işlem yapan assembly dili komutlarıdır. STOS B, STOS W ve STOS D veri depolamak
için kullanılan
özel dize talimatlarıdır. STOS B, STOS W ve STOS D - üst düzey genel
bakışta bu şekilde görünürler.
STOS B -
register'ından
- register'ına bir byte saklar, böylece - register'ından - register'ına bir byte saklar ve - byte ile birlikte
saklandıktan sonra - adresi bir byte artacaktır.
STOS W - yazmacından - yazmacına bir sözcük saklar.
Yani -, -'ye atandıktan sonra adres iki bayt ilerler, iki bayt ileri gider.
STOS D, - yazmacından - yazmacına bir çift sözcük saklar.
Böylece - değeri - ile işaret edilen adrese kaydedildikten sonra adres dört bayt ileri
gider.
Her işlemden sonra - kaydı, flags kaydındaki yön bayrağına bağlı olarak otomatik olarak
artırılır veya azaltılır.
Varsayılan olarak, bayraklar kaydı bunun artmasına neden olur.
Bu konuya ilerleyen bölümlerde değineceğiz.
Pratik örnek bir: MOV -, 41. Yükle - ASCII değeri onaltılık olarak A ile.
Yani hex 41 alfabe karakteri büyük A'dır. 'e taşıdıktan sonra, şimdi
A karakterini saklamak istediğiniz - adresini
belirleyin. Yani burada veri segmentinde bulunan 403050 adresini taşıyacaksınız.
Sizinki için farklı olabilir. Bilgisayarınız için durum farklı olabilir.
Böylece, verilerinizi depolamak istediğiniz bilinen bir adresle, alfabeniz
A'yı yüklersiniz. Sonra STOS B komutunu çağırırsınız.
STOS B komutunun herhangi bir argüman almadığına dikkat edin çünkü -'nin yanı sıra -'deki adrese
de bağlıdır.
Bu yüzden STOS B'yi çağırmadan önce bu
adresi ayarlamanız gerekir. STOS B'yi çağırdıktan sonra, A baytını - ile işaret edilen bellek konumuna depolayacaksınız.
Pratik örnek iki: MOV -, onaltılık olarak 1234.
Yani bu onaltılık olmalı, bu yüzden
bunu ön tarafa onaltılık olarak yazacağım.
İşte yükleyeceğiniz yer - onaltılık 1234
değeri ile.
Ardından, bu değeri saklamak istediğiniz adresle birlikte yükleyeceksiniz.
Yani bilinen bir adresle yükleyin
ve son olarak STOS W'yi çağırın, bu da dize sözcüğünü sakla anlamına gelir.
Böylece 1234 kelimesini - ile işaret edilen adres konumunda saklayacaksınız.
Yani burada böyle olması gerekiyor.
Örneğin, burada bu değeri - kaydına taşırsınız.
Bu bir dword değeridir, dört bayttır.
Yükle - onaltılık
değerle 12345678.
Daha sonra, adresi saklamak istediğiniz yere taşıyacaksınız -.
Yani bu adrese taşıyacaksın.
Ve bu adres de veri segmentinden alınır.
Daha sonra STOS D'yi
arayacaksınız. STOS D, dize doubleword veya dword saklamak anlamına gelir.
Böylece 12345678
çift sözcüğünü - ile işaret edilen bellek konumunda saklayacaktır.
Şimdi x64dbg'mizi açalım ve şuna bir göz atalım.
Talimatları burada zaten girdim ve buradan
görebilirsiniz.
Lütfen sizin durumunuz için de aynısını yapın.
Şablonu açın ve ardından talimatları uygun şekilde girin.
İşte sen MOV -, 41.
Yani bu 41, A karakteri için onaltılık değeri ifade eder.
Daha sonra, 403050 veri segmentindeki bu adresi - içine taşıyacaksınız çünkü bu hex 41'i o konumda saklamak
istiyorsunuz.
Daha sonra STOS B'yi çağırarak onu orada depolayacaksınız.
Bu yüzden 00403050 için bellek haritasına bir göz atın.
Bellek haritasına giderseniz, buradaki veri segmentine çift tıklayın.
Seni buraya götürecek.
Bu yüzden örneğimde kullanmak üzere bir, iki, üç olmak üzere bu üç konumu seçtim.
Sizin durumunuzda, farklı adresleriniz varsa, bilgisayarınızda ne görüyorsanız
ona göre kendi adresinizi seçmelisiniz.
Şimdi buraya bir kesme noktası koyalım ve ardından bunu çalıştıralım.
O yüzden kaçıyoruz.
Kesme noktasına ulaşıyor ve sonra şurada, hadi üzerinden geçelim.
Şimdi hex 41'i -'ye taşıyacak.
Kayıt defterine bir göz atın.
Bu satırı çalıştırdıktan sonra, - şimdi ASCII A için bir hex olan
41 değerini saklar. Ve sonra A karakterini saklamayı düşündüğünüz veri segmentinin
adresi olan bu adresi taşıyacaktır.
Onu -'ye taşır.
Şimdi oraya
gidelim ve izleyelim-- bu konum 403050.
Şimdi STOS B'yi çağıracak ve buradaki adrese ne olduğunu izleyeceksiniz - ve ayrıca
bunun üzerine bastığımızda burada ne olduğunu izleyeceksiniz.
Adres
- bir bayt, bir bayt artar.
Ayrıca burada, hex A karakterinin bu konumda hex değeri olan 41 olarak saklandığını fark
edeceksiniz.
Bu nedenle, STOS B'ye yapılan her çağrıdan sonra, STOS B bir bayt depoladığı için bir
artacağını unutmayın.
Şimdi ikinci örneğe, yani bu örneğe geçiyoruz.
Bu 1234'ü -'ye taşıyacağız.
O zaman bir adım atalım ve izleyelim -.
- kaydının alt iki baytıdır.
Üzerine basarız ve şimdi görürüz ki - bu talimat nedeniyle
1234 değerini almıştır.
Ardından, 1234'ü depolayacağınız veri segmenti adresini yükleyecektir.
STOS W'yi aradığınızda, yani bu 00403060 buradaki.
Şimdi oraya gidelim ve -'deki değeri izleyelim.
- şimdi bu satırı çalıştırdıktan sonra 00403060 adresini saklar.
Şimdi STOS W için hazır ve bu adrese ne olacağını izleyin. İki bayt artması gerekiyor ve sonra
burada
da adresi yüklemesi gerekiyor.
Buradaki adresi 1234 değeriyle little-endian
sırasına göre yüklemelidir.
Bir adım ilerlediğinizde 1234'ün ters, küçük endian sıralamasına
sahip olduğunu görürsünüz.
Ve ayrıca - şimdi dört bayt arttığına dikkat edin.
İşte böyle işliyor.
STOS W'yi her çağırdığımızda, bunu iki bayt artıracaktır.
Özür dilerim, iki bayt, çünkü bu bir kelime.
Yani W bir kelimedir, bu
yüzden STOS W'yi her çağırdığınızda - iki bayt veya bir kelime artacaktır.
Daha sonra, üç numaralı uygulamaya, yani bu uygulamaya geçeceğiz.
Şimdi dword'ü - içine depolayacaksınız.
Şimdi bir adım atalım ve -'e ne olduğunu izleyelim.
Şimdi - bu talimattan gelen dword 12345678 ile saklanmıştır.
Şimdi STOS D'ye hazır hale getirmek için burada bulunan bu adresi yükleyecek, çünkü STOS D'nin bir dword'e
ihtiyacı var, bu yüzden
burada dword kullanmanız gerekiyor.
Şimdi bu satırı çalıştıracağım ve -'ye ne olacağını izleyeceğim. Dört bayt artması gerekiyordu ve burada
bu 12345678 adresini ters little-endian olarak yüklemesi gerekiyordu.
O halde bunun üzerinden geçelim.
Ve şimdi STOS D'yi görüyorsunuz ve şimdi STOS D'nin 12345678 adresinde saklandığını
ve ardından - dört bayt
veya bir dword ile artırıldığını göreceksiniz.
Storage-string depolama talimatları bu şekilde çalışır.
Bu video için hepsi bu kadar.
İzlediğiniz için teşekkürler.