jmp跳轉的本質

weixin_34185364發表於2018-05-31
assume cs:code

code segment
        mov ax,4c00h
        int 21h

start:  mov ax,0
s:      nop                   ;佔位一個位元組
        nop                   ;佔位一個位元組

        mov di,offset s     ;s的偏移地址
        mov si,offset s2   ;s2的偏移地址
        mov ax,cs:[si]      ;把s2的內容傳給ax  
        mov cs:[di],ax      ;把s2的內容傳給s nop佔一個位元組  jmp佔兩個位元組 正好 此時s: jmp short s1

s0:     jmp short s

s1:     mov ax,0
        int 21h
        mov ax,0

s2:     jmp short s1
        nop

code ends
end start
2954412-f1ef6485b6e04d92.png
image.png

2954412-0c74a6977a2e9489.png
image.png

為啥nop nop就變成了 jmp 0000了呢

s2 到 s1的距離 22h-18h =10h (jmp(2) + mov(3) + mov(3) +int(2)) 也就是說 jmp short s1的時候 向上偏移了
10所以 實際上 jmp shirt s 執行之後 執行的是 jmp short s1 即向上偏移10
在debug裡就是 jmp 0000

相關文章