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函数:

  • 相关阅读:
    进度条加载后显示页面
    解决跨域问题
    js下IE和FF的一些兼容写法总结
    linux
    linux 批量替换文件内容
    DVWA-1.9之fileupload
    python库安装失败的解决方法
    python程序打包
    CF 1133C Balanced Team
    CF 1133B Preparation for International Women's Day
  • 原文地址:https://www.cnblogs.com/lx20145332/p/6131040.html
Copyright © 2011-2022 走看看