用call ret实现花指令和跳转的例子

 

ExpandedBlockStart.gif 代码
#include  < iostream.h >
#include 
< windows.h >
void  main()
{
    DWORD p;
    _asm
    {
        call l1
l1:
        pop eax
        mov p,eax
// 确定当前程序段的位置
        call f1
        _EMIT 
0xEA // 花指令,此处永远不会执行到
        jmp l2 // call结束以后执行到这里
f1: // 这里用F8OD会终止调试,F7跟进的话就正常,why?
        pop ebx
        inc ebx
        push ebx
        mov eax,
0x11111111
        ret
l2:
        call f2
// 用ret指令实现跳转
        mov ebx, 0x33333333 // 这里永远不会执行到
        jmp e // 这里永远不会执行到
f2:
        mov ebx,
0x11111111
        pop ebx
// 弹出压栈的地址
        mov ebx,offset e // 要跳转到的地址
        push ebx // 压入要跳转到的地址
        ret // 跳转
e:
        mov ebx,
0x22222222
    }
    cout
<< hex << p << endl;
}

 

 

转载于:https://www.cnblogs.com/feiyucq/archive/2010/05/04/1727070.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SEH异常的应用 SEH异常就是结构化异常处理,程序遇到SEH异常时,异常交给系统处理(这讲是一个非常负责的过程,很容易跟飞),所以利用SEH异常时可以一定程度的防止程度调试(SEH异常在壳里是很常见的)。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ push ******** //地址压入堆栈 mov eax,dword ptr fs:[0] push eax //fs[0]压入堆栈,执行完成后fs[0]指向堆栈 mov dword ptr fs:[0],esp //构造一个ERR结构 mov esi,0 //简单的赋值语句 mov eax,dword ptr ds:[esi] //产生异常 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ push ******** mov eax,dword ptr fs:[0] push eax mov dword ptr fs:[0],esp mov ebx,0 div ebx ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ nop push ******** mov eax,dword ptr fs:[0] push eax mov dword ptr fs:[0],esp int 3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ push ******** mov eax,dword ptr fs:[0] push eax mov dword ptr fs:[0],esp nop int 68 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ push ******** mov eax,dword ptr fs:[0] push eax mov dword ptr fs:[0],esp nop vxdcall 134543 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ push ******** mov eax,dword ptr fs:[0] push eax mov dword ptr fs:[0],esp ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ push xxx push dword ptr fs:[0] mov fs:[0], esp stc ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ push xxx push dword ptr fs:[0] mov fs:[0], esp JMP 0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ push xxx push dword ptr fs:[0] mov fs:[0], esp ret ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ push xxx push dword ptr fs:[0] mov fs:[0], esp pop ss
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值