关闭

几种跳转指令和对应的机器码

4485人阅读 评论(0) 收藏 举报
几种跳转指令和对应的机器码

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写进去就可以了
1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:723961次
    • 积分:8375
    • 等级:
    • 排名:第2442名
    • 原创:19篇
    • 转载:581篇
    • 译文:0篇
    • 评论:54条
    最新评论