zoukankan      html  css  js  c++  java
  • 反汇编测试

    1.汇编截图

    2.使用gdb跟踪汇编代码

    • 使用gdb week1306指令打开gdb调试器

    • 使用break main指令在main函数处设置断点,再用r指令运行代码

    • 用disassemble指令获取汇编代码

    • 用i r指令查看各寄存器的值


      <__x86.get_pc_thunk.ax>的作用就是把esp的内容赋值给eax。
      简单来说call 0x11c5 <__x86.get_pc_thunk.ax>的意义就是为了获取下一条指令的地址。
      此时还没有调用函数,esp栈中元素为0

    • push $0x8分配4字节的栈空间,esp减4

    • call调用f,esp的值为8

    • 执行f函数,f初始化帧指针,将上一个函数的基址入栈,将当前%esp作为新基址

    • 分配栈空间,为传参做准备

    • 将%esp中的8存入栈中

    • call调用g

    • 执行g函数,g初始化栈指针

    • 分配栈空间

    • 将%esp中的8存入栈中

    • 将 %eax 与立即数 3 相加

    • pop %ebp在g结束前弹栈

    • ret返回g中call的调用位置,结束g函数

    • 将 %esp 与立即数 4 相加

    • leave返回准备栈

    • ret返回f中call的调用位置,结束f函数

    • 将 %eax 与立即数1相加

    • leave返回准备栈

    • ret结束main函数

  • 相关阅读:
    spark foreachPartition
    spark mapPartition
    spark union intersection subtract
    spark join 类算子
    spark action 算子
    卷展栏模板
    锁定/解锁
    3D一些提示信息
    文件对话框多选
    吸取属性
  • 原文地址:https://www.cnblogs.com/1208499954qzone/p/15517846.html
Copyright © 2011-2022 走看看