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

    GDB调试汇编堆栈分析

    代码:

                 


    sudo apt-get install libc6-dev-i386命令安装所需库

      •  进入之后先在main函数处设置一个断点,再run一下,使用disassemble指令获取汇编代码,用i(info) r(registers)指令查看各寄存器的值:



      • 可见此时主函数的栈基址为0xffffd098,用x(examine)指令查看内存地址中的值,目前%esp所指为0,%ebp为0

      • 下面展示每一步时%esp、%ebp和堆栈内容的变化:

      • i

      • call指令将下一条指令的地址入栈,此时%esp,%ebp和堆栈的值为:

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

      • 先为传参做准备:



      • 实参的计算在%eax中进行:

      • 实参入栈06

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

                   

                   

                   计算short+int

                   

                    

                    

                   

                   

                  

                     

                      

                    

                    pop %ebp指令将栈顶弹到%ebp中,同时%esp增加4字节:

                    

                   

                   

                  pop %ebp指令将栈顶弹到%ebp中,同时%esp增加4字节:

                  

                    

                   

                  ret指令将栈顶弹给%eip:

                  

                  

                 

                 因为函数f修改了%esp所以用leave指令恢复。leave指令先将%esp对其到%ebp,然后把栈顶弹给%ebp:

                  

                 

                 

                  

                  

                  

                 

    • 主函数汇编代码,并结束栈帧的调用。

    指令 esp ebp 堆栈
    push $0x8
    0xffffd098  
    0xffffd098 0x0
    call 0x80483ef
    0xffffd094  
    0xffffd098 0x8 0x0
    push %ebp
    0xffffd090  
    0xffffd098 0x8048412 0x8 0x0
    mov %esp,%ebp 0xffffd08c 0xffffd098 0xffffd098 0x8048412 0x8 0x0
    mov 0x804a01c,%edx 0xffffd08c 0xffffd08c 0xffffd098 0x8048412 0x8 0x0
     mov 0x8(%ebp),%eax  0xffffd08c  0xffffd08c

     0xffffd098 0x8048412 

    0x8 0x0

     add %edx ,%eax  0xffffd08c 0xffffd08c  0xffffd098 0x8048412 0x8 0x0
     push %eax  0xffffd08c  0xffffd08c  0xffffd098 0x8048412 0x8 0x0
     call 0x80483db<g>  0xffffd088  0xffffd08c  0xa 0xffffd098 0x8048412 0x8 0x0
     push %ebp      0xffffd084  0xffffd08c  0x8048403 0xa 0xffffd098 0x8048412 0x8 0x0
     move %esp %ebp  0xffffd080  0xffffd08c  0xffffd08c 0x8048403 0xa 0xffffd098 0x8048412 0x8 0x0
     movzwl 0xffffd080       0xffffd080  0xffffd08c 0x8048403 0xa 0xffffd098 0x8048412 0x8 0x0
     movswl %ax %edx  0xffffd0080  0xffffd080  0xffffd08c 0x8048403 0xa 0xffffd098 0x8048412 0x8 0x0
     mov 0x8(%ebp),%eax  0xffffd080  0xffffd080  0xffffd08c 0x8048403 0xa 0xffffd098 0x8048412 0x8 0x0
     add %edx %eax  0xffffd080  0xffffd080  
    0xffffd08c 0x8048403 0xa 0xffffd098 0x8048412 0x8 0x0
    pop %ebp 0xffffd080 0xffffd080 0xffffd08c 0x8048403 0xa 0xffffd098 0x8048412 0x8 0x0
    ret 0xffffd084 0xffffd08c 0x8048403 0xa 0xffffd098 0x8048412 0x8 0x0
    add $0x4 ,%esp 0xffffd08 0xffffd08c 0xa 0xffffd098 0x8048412 0x8 0x0
    leave  0xffffd08c 0xffffd08c 0xffffd098 0x8048412 0x8 0x0
    ret 0xffffd090  0xffffd098 0x8048412 0x8 0x0
    add $0x4 ,%esp 0xffffd09 0xffffd098 0x8 0x0
    leave 0xffffd098 0xffffd098 0x0
    ret 0xffffd09c 0x0  
  • 相关阅读:
    OpenWrt VTun Client
    LibreSpeed install on centos
    信号频道带宽、符号率、速率对应关系
    DVB相关标准
    Cisco Switch STP
    TROUBLESHOOTING MULTICAST ROUTING
    企业ERP核心模型与云计算生态
    Istio介绍(1)
    ServiceMesh案例
    Jenkins流水线发布实现CICD到Kubernetes
  • 原文地址:https://www.cnblogs.com/besti145306/p/6208224.html
Copyright © 2011-2022 走看看