zoukankan      html  css  js  c++  java
  • gdb调试

    ·代码(实验楼中的代码,改了部分数值)命名为test.c

    int g(int x)
    {
      return x + 7;
    }
    
    int f(int x)
    {
      return g(x);
    }
    
    int main(void)
    {
      return f(3) + 5;
    }
    

    ·在64位的机器上产生32位汇编(使用指令为:gcc - g test.c -o test -m32),然后使用gdb test指令进入gdb调试器,进入后在main这里设置一个断点,然后运行:

    ·
    ·使用指令:disassemble获取汇编代码,指令:info registers查看各寄存器的值:

    此时主函数的基址为Ox80483d8

    ·使用指令:display /i $pc,这样在每次执行下一条汇编语句时,都会显示出当前执行的语句

    ·call指令将下一条指令的地址入栈:

    ·将上一个函数的基址入栈,从当前%esp开始作为新基址:

    ·为传参做准备,然后实参入栈:

    ·f函数的汇编代码:

    ·实参入栈,然后call指令将下一条指令的地址入栈:

    ·分配栈空间:

    ·将%eax与立即数7相加:

    ·在结束前弹栈:

    ·结束函数并与立即数相加:

    ·leave返回栈然后进入main函数:

    ·ret结束main函数:

  • 相关阅读:
    storm中的Scheduler
    开启flume的远程调试功能
    修改flume源码,使其HTTPSource具备访问路径功能
    非功能测试——效率测试
    python100例
    awk命令
    shell正则表达式
    python的垃圾回收机制
    冯-诺伊曼体系结构
    jmeter读取文件内容做变量
  • 原文地址:https://www.cnblogs.com/lx20145332/p/6131040.html
Copyright © 2011-2022 走看看