幾種跳轉指令和對應的機器碼

幾種跳轉指令和對應的機器碼

0xE8    CALL    後面的四個字節是地址

0xE9    JMP    後面的四個字節是偏移

0xEB    JMP    後面的二個字節是偏移

0xFF15    CALL    後面的四個字節是存放地址的地址

0xFF25    JMP    後面的四個字節是存放地址的地址


0x68    PUSH    後面的四個字節入棧

0x6A    PUSH    後面的一個字節入棧




shellcode跳轉回原始OEP方法一


大部分人比較喜歡直接jmp跳轉到原始oep,這時候通常都用e9跳轉,e9後面的四個字節是一個偏移地址。

計算公式: 偏移地址 = 目的地址 - 跳轉基地址(jmp的下一條指令的地址)

也就是 原始OEP - jmp的下一條指令的地址

    db    0e9h        ;這是jmp
OEPOffs:
    dd    ?        ;這裏是4個字節 未初始化


偏移地址 = 原始OEP - (offset OEPOffs + 4)  爲何+4 由於OEPOffs標號向後偏移4個字節 纔是jmp的下一條指令地址  也就是跳轉基地址



shellcode跳轉回原始OEP方法二

有些人用 push oep而後jmp dword ptr [esp]的方法跳回原始oep,這時候shellcode要這樣寫:

    db    68h
OEP:
    dd    ?
    jmp dword ptr [esp]

68h是 push後面四個字節的意思  dd ? 聲明瞭四個字節,而後經過OEP標號,定位到這個位置,而後把原始OEP寫進去就能夠了shell

相關文章
相關標籤/搜索