zoukankan      html  css  js  c++  java
  • 解决思路

    上节课,我们发现的问题是.
    通过ESP定位参数,随着入栈的数据增加,ESP的位置也发生变化.
    可能一会ESP+0x10 是倒数第一个参数,但因为又有其他数据进栈,倒数第一个参数的位置,可能就变成ESP+0x20了.

    这样强烈的变化对于我们程序的设计和控制非常不利.

    那么我们平常用C语言写代码的时候,如果在C语言里面实现了一个函数.
    编译器生成的汇编代码大概是如何解决这个问题的呢?这节课,我们来模拟一下.

    在我们32位程序中,操作系统为我们分配了一个栈空间.


    这节课,我们要利用EBP和ESP寄存器来解决这个问题.
    push 0x1

    push 0x2

    push 0x3

    call **********
    push ebp  //0000

    mov ebp,esp //0001

    sub esp,0x10
    push ecx
    push edx
    push ebx


    mov eax,[EBP+0x8]
    add eax,[EBP+0xC]
    add eax,[EBP+0x10]

    push ebx

    push edx
    push ecx

    mov esp,ebp  //0001
    pop ebp//0000
    ret


    我们的汇编语言就暂时告一段落了,接下来开始C语言课程,并且会跟大家学习的汇编语言结合起来一起讲.
    所以,各位朋友千万不要贪图一天要看几集视频,图速度快,一定要稳扎稳打,理解了再看下一集.

  • 相关阅读:
    Django的models介绍
    Django的模板继承
    Django的模板语言介绍
    django的视图函数介绍
    django的流程分析
    1、数据库优化
    git 开发中的总结
    ob
    docker-compose
    如何批量删除Docker中已经停止的容器
  • 原文地址:https://www.cnblogs.com/xiaodaxiaonao/p/7345470.html
Copyright © 2011-2022 走看看