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

2021-08-20 19:27:05 字數 819 閱讀 2997

分析:

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 short s

s1: mov ax,0

int 21h

mov ax,0

s2: jmp short s1

nopcodesg ends

end start

先不上機分析,用腦海跑到4個mov的地方,發現是將s2的jmp**複製到s0處,然後往下跑。先跳回s0,然後由於複製了s2的**,繼續跳到s1,執行乙個不知道幹嘛的中斷。

一切很理想,但是上機後發現,奇怪了,為啥會返回,一步一步執行後發現**變了

這裡變成了0000,而不是s1的起始位址。這是為什麼呢?

其實我們在複製程式的時候,計算機是複製記憶體的資料,而不是**,也就是s2處前面的e8f6

而e8f6的意思就是向上跳10個位址,因為s2調到s1就是10個位址,所以在s處向上跳10個位址就是返回的**段了。

實驗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 分析乙個奇怪的程式

答案 可以正常執行。我們來逐步分析 這是我們的程式對應的機器指令!首先我們的 cs ip 指向的是076a 005,由此我們可以看出來076a 000 076a 004這段位址儲存的彙編指令應該是 mov ax,4c00h int21h 然後我們逐步執行,nop 是空指令,佔乙個位元組,做完實驗後我...

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

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 ...