zoukankan      html  css  js  c++  java
  • 【逆向知识】堆栈图-汇编中的函数

    push        ebp                 ; 提升堆栈
    mov         ebp,esp   
    sub         esp,0CCh  
    ------------------------------------------
    push        ebx                 ; 保留现场,函数在执行的时候会用到一些寄存器,但这些寄存器中
    push        esi                 ; 值很可能会被程序用到,所以要先存储到内存中
    push        edi  
    push        ecx  
    ------------------------------------------
    lea         edi,[ebp-0CCh]      ; 向分配的空间填充数据
    mov         ecx,33h  
    mov         eax,0CCCCCCCCh  
    rep stos    dword ptr es:[edi]  
    ----------------------------------
    pop         ecx                 ; 函数实际实现的功能
    mov         dword ptr [this],ecx  
    
    mov         eax,dword ptr [this]  
    mov         dword ptr [eax+4],1  
    
    mov         eax,dword ptr [nID]  
    push        eax  
    push        offset string "
    ID:%d Who is your God? I am!
    "... (0EC6E94h)  
    call        _printf (0E33D73h)  
    add         esp,8  
    ----------------------------------------
    pop         edi                 ; 恢复现场,将之前保留的寄存器的值恢复
    pop         esi  
    pop         ebx  
    -----------------------------------------
    add         esp,0CCh            ; 堆栈平衡
    cmp         ebp,esp  
    call        __RTC_CheckEsp (0E32356h)  
    mov         esp,ebp             ; 降低堆栈 
    pop         ebp                 ; 恢复栈底
    ret         4                   ; 函数执行完毕,返回到调用处,等同于pop eip
    
  • 相关阅读:
    模块的搜索路径
    循环导入问题
    模块的四种形式
    匿名函数
    面向过程编程
    内置函数
    名称空间和作用域
    函数嵌套
    函数对象
    可变长参数
  • 原文地址:https://www.cnblogs.com/17bdw/p/8451376.html
Copyright © 2011-2022 走看看