預備知識:
(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:codesgview codecodesg 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
(注意:程式從程式入口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...