組合語言實驗8 分析乙個奇怪的程式

2021-10-20 06:22:05 字數 1423 閱讀 2235

答案:可以正常執行。

我們來逐步分析:

這是我們的程式對應的機器指令!

首先我們的 cs:ip 指向的是076a:005,由此我們可以看出來076a:000~076a:004這段位址儲存的彙編指令應該是:

mov ax,

4c00h

int21h

然後我們逐步執行,nop 是空指令,佔乙個位元組,做完實驗後我們就會發現它的作用,應該就是為我們湊乙個位址,最後讓指令能cs:ip能指向076a:000這個位址。執行至076a:000a 後,di暫存器獲得 s 標號的偏移位址,之後si暫存器又獲得 s2 標號的偏移位址,然後我們獲取 s2標號處的指令,存入ax,暫存器,此時 ax=ebf6這條指令含義是個關鍵。

現在我們來分析下面這段**:

s1:

mov ax,

0int

21h mov ax,0

s2:jmp short s1

nop

jmp short s1 這個段**的指令 就是ebf6,在這裡的含義是跳到了s1標號處,但是jmp short s1並不包含s1的位址,它包含的是和當前位址的相對距離,所以這條指令的含義是ip向後移動 x 距離,那麼我們看一下x是多少?

x=0020h-0018h=8

此時我們知道了 x 是 8。

然後我們繼續從位址 076a:0016出分析,我們執行此處指令跳到了,076a:0008處,此處兩個位元組的nop指令被覆蓋為了ebf6指令,我們知道ebf6指令的含義是向後移動8的距離,那麼我們執行此條指令,到076a:000處,此時程式可以正常結束!

實驗8 分析乙個奇怪的程式

仔細閱讀9.3節依據位移進行轉移的jmp指令,然後理解下面的這個很奇怪的程式就容易多了,當然要看著機器碼去分析。assume cs codesg codesg segment mov ax,4c00h int 21h start mov ax,0 s nop nopmov di,offset s m...

實驗8 分析乙個奇怪的程式

分析 assume cs codesg codesg segment mov ax,4c00h int 21h start mov ax,0 s nop nopmov di,offset s mov si,offset s2 mov ax,cs si mov cs di ax s0 jmp shor...

彙編實驗八 分析乙個奇怪的程式

assueme cs codesg codesg segment mov ax,4c00h int 21h start mov ax,0 s nop nopmov di,offset s mov si,offset s2 mov ax,cs si mov cs di ax s0 jmp short ...