zoukankan      html  css  js  c++  java
  • __alloca_probe分析

    用IDA分析程序时,经常可以看到__alloc_probe(malloc.h中的alloca函数)这个函数,这个函数有什么用呢!

        现在分析一下这个函数。

    seg000:004042E0 __alloca_probe  proc near

    seg000:004042E0 arg_0           = byte ptr  4

    seg000:004042E0

    seg000:004042E0                 push    ecx

    seg000:004042E1                 cmp     eax, 1000h      ; 判断申请的大小是为小于1000h

    seg000:004042E6                 lea     ecx, [esp+4+arg_0] ; 取得原来参数在栈中的地址,用于用来提升栈空间

    seg000:004042EA                 jb      short loc_404300 ; 小于

    seg000:004042EC

    seg000:004042EC loc_4042EC

    seg000:004042EC                 sub     ecx, 1000h

    seg000:2                 sub     eax, 1000h      ; 这相当于把栈提高了

    seg000:7                 test    [ecx], eax      ; 看是否溢出

    seg000:9                 cmp     eax, 1000h

    seg000:004042FE                 jnb     short loc_4042EC

    seg000:00404300

    seg000:00404300 loc_404300:

    seg000:00404300                 sub     ecx, eax        ; 再减去1000h的余数

    seg000:00404302                 mov     eax, esp        ; 记录原来的栈顶指针

    seg000:00404304                 test    [ecx], eax      ; 看是否溢出

    seg000:00404306                 mov     esp, ecx        ; 修改堆栈指针

    seg000:00404308                 mov     ecx, [eax]      ; 还原ecx的值

    seg000:                 mov     eax, [eax+4]    ; 这里存放的是返回地址

    seg000:0040430D                 push    eax             ; 构建一个假的Far Return 堆栈返回地址

    seg000:0040430E                 retn

    seg000:0040430E __alloca_probe  endp

           函数分为三部分,首先一开始检查申请的栈大小是否大小0x1000,如果大于的话,不停的循环,依次将大小和栈顶地址减0x1000,再判断一下是否溢出,通过test [ecx], eax来判断是否溢出,因为栈大小有限制,如果申请的空间过大,到了低端地址,是无法访问的,所在test一下,如果无法访问,则会报错产生一上访问异常。最后再减去0x1000的余数,再检查一下是否到了低地址,再修改esp的值,还原原来ecx的值,再构建一个假的Far return返回地址。

           流程如下:

    http://hi.baidu.com/evilknight/item/6314a1d373a232e2b2f77733

  • 相关阅读:
    汇编-实验9
    Starling开源手势库AcheGesture
    Robotlegs2的Starling扩展
    Flash Builder 4.6/4.7 注释以及字体大小修改
    js中函数的理解
    js对象引用赋值后
    var声明提前 undefined
    光棍节程序员闯关秀
    body和普通div背景图宽高百分比的区别
    笔试题
  • 原文地址:https://www.cnblogs.com/keepfocus/p/2590036.html
Copyright © 2011-2022 走看看