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

2022-04-01 07:02:00 字數 1098 閱讀 6580

預備知識:

(1) offset: 獲取標號的偏移位址

(2) jmp  :依據位移進行跳轉 (jmp short 標號 ,jmp near ptr 標號,jmp near ptr 標號)——轉到標號處

(3) jmp  :轉到記憶體 (jmp word ptr + 位址,jmp dword ptr + 位址 )

(4) jcxz  :有條件轉移

(5) loop:迴圈指令

實驗任務:

source code:

assume cs:codesg

codesg segment

mov ax,4c00h

int21h

start:

mov ax,0s:

nopnop

mov di,offset s

mov si,offset s2

mov ax,cs:[si]

mov cs:[di],ax

s0:jmp

short

s s1:

mov ax,

0int

21h mov ax,

0s2:

jmp

short

s1 nop

codesg ends

end start

view code

(注意:程式從程式入口start開始)

di,si是根據**段的偏移位址,mov ax,cs:[si],就是將s2處的機器碼給ax;

mov cs:[di],ax將s處兩條nop 指令覆蓋;具體就是f6eb;

神奇的地方就是,下一條指令確實mov ax,4c00h,int 21h;

jmp 0000,而不是jmp 到 我們以為的s1處,那是因為f6eb具體的含義,jmp指令裡面沒有存要目的位址,而是靠修改ip的值,lo(∩_∩)o哈哈~

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

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

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