当前位置: 首页 > news >正文

gdb跟踪应用程序原理浅析

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寄存器的值,直接读取。

 

posted on 2016-02-01 12:32 开心happy 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/minihaohao/p/5175035.html

相关文章:

  • ORACLE 11G内存管理方式
  • 正则表达式总结
  • Cocos2d-js使用ETC1格式的图片
  • 2015年年终总结
  • Java实现多线程邮件发送
  • [算法]需要排序的最短子数组长度
  • 面向对象编程(十四)——面向对象三大特性之多态①
  • 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。...
  • java设计模式之——适配器模式
  • 工具-常用工具
  • [Flex] PopUpButton系列 —— 控制弹出菜单的透明度、可用、可选择状态
  • javascript 变量声明有var与无var 的区别
  • 我理解的this
  • 自己定义View常处理的回调函数
  • Oracle 建立索引及SQL优化
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • chrome扩展demo1-小时钟
  • eclipse的离线汉化
  • Java-详解HashMap
  • jquery cookie
  • LeetCode18.四数之和 JavaScript
  • mysql常用命令汇总
  • PHP 7 修改了什么呢 -- 2
  • SQLServer之索引简介
  • zookeeper系列(七)实战分布式命名服务
  • 读懂package.json -- 依赖管理
  • 给初学者:JavaScript 中数组操作注意点
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 手写一个CommonJS打包工具(一)
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • gunicorn工作原理
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #pragma data_seg 共享数据区(转)
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (20050108)又读《平凡的世界》
  • (C语言)逆序输出字符串
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (图)IntelliTrace Tools 跟踪云端程序
  • (转)h264中avc和flv数据的解析
  • ****Linux下Mysql的安装和配置
  • .Net - 类的介绍
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .net反编译工具
  • .NET命令行(CLI)常用命令
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • /etc/sudoer文件配置简析
  • [20150707]外部表与rowid.txt