zoukankan      html  css  js  c++  java
  • gdb跟踪应用程序原理浅析

    了解了应用程序的编译运行原理后,下面看一看gdb能追踪到进程的原理:

    gdb运行在应用态,基本用法是gdb ./hello,在gdb程序中拉起了hello程序,hello进程相当于gdb的子进程,gdb是hello进程的父进程。

    一)断点的原理

    gdb使用b backpoint在可执行文件中加入断点-------------在可执行文件对应的backpoint处,加入了INT3 指令,该指令是触发中断,内核收到此中断后,将当前进程暂停执行,并将中断转为软件信号SIGTRAP,发给hello进程。

    子进程被父进程使用ptrace个跟踪后,子进程的信号会被父进程获取,这样gdb获得这个信号后,暂停应用程序,可查看调用栈。

    查看调用栈有两种方法:

    1)glibc中的backtrace函数,获取当前线程的调用堆栈。

    应用程序的SIGSEGV信号,可以自定义捕获,在自定义函数中调用backtrace函数,打印调用栈。

    2)直接使用_asm_获得ebp寄存器的值,直接读取。

  • 相关阅读:
    第五章 Internet协议
    第四章 地址解析协议
    Learn the shell
    Linux学习前的准备
    第三章 链路层
    第二章 Internet 地址结构
    后台数据导出为Excel
    C#开发客户端、JAVA和tomcat开发服务端
    Java基础
    C++学习笔记--(1)
  • 原文地址:https://www.cnblogs.com/minihaohao/p/5175035.html
Copyright © 2011-2022 走看看