2016-04-11 12 views
-2

Montaj talimatını belirli bir adreste güncellemek istiyorum. örneğinMontaj talimatının nasıl saklandığını inceleme

0x088...  jmp  0x88465002 

(gdb) x /2b 0x088 
0x088... <main+20> 0xeb 0x15 

Ben talimatları bayt olarak kodlanmıştır keşfetti: Bunu yapmak için, ben özellikle aşağıda talimat bakarak, montaj talimatları nasıl saklandığını görmek için bir C işlevi demonte JMP, 0xEB olarak kodlanmıştır. Ancak, neden JMP'un yeri 0x15 olarak depolanıyor? Bunun nedeni, 0x15 bayt yığınını aşağı atlıyoruz (yani 0x15 ofset)?

+2

Montajcı/Intel referans kılavuzuna sahip olursanız, hepsi açık olacaktır ... "Hiçbir şey yardımcı olmazsa, kılavuzu okuyun." –

+0

Montaj yönergelerinin, bir program görüntüsünde yalnızca * makine * talimatlarına karşılık geldikleri anlamında adresleri olduğunu unutmayın. Ayrıca, makine yönergelerinin birden fazla bayt olarak kodlanabileceğini de unutmayın (görünüşte yaptığınız gibi herhangi bir işleneni hariç bile). –

+0

Lütfen derleme dili ile ilgili bir kitap okuyun ve referans kılavuzuna sahip olun. – Olaf

cevap

3

0xEB Thanks--

x 86 nispeten kısa atlama işlem kodu. Kısa, 8 bit üzerinde imzalı yer değiştirme anlamına gelir. Ve evet 0x15, mevcut komut sayacı değerine göre (bu yüzden bir sonraki komutun adresi), sonraki adımda 0x15 = 21 bayt olan yer değiştirmedir.