最新要闻
- 开封市通许县四所楼镇:让社情民意联络点当好民声传话筒|全球快讯
- 支持华为HMS服务!酷比魔方Pad 50Pro发布 首发899元
- 世界热点评!陌陌被苹果下架 官方回应:技术问题正解决 老用户不影响
- 这五一超20万人去淄博:鲁C变身网红旅游名城_快资讯
- 当前讯息:怎么看?老人欲插队被服务员严词拒绝:前有插队婆孙被网曝 还被做车贴很恶心
- 功能不成熟 马斯克推特直播秒变马赛克 网友吐槽:8-Bit埃隆_世界新要闻
- 今年全国快递业务量突破400亿件
- 坎普斯boss怎么打_坎普斯怎么打_当前快讯
- 一机多用:劲能电钻/电动螺丝刀39元起(100元大额券) 每日速递
- 【天天热闻】向华为供货740万块硬盘 被重罚3亿美元!希捷:已和解并开始付罚金
- 当前观点:特斯拉公共充电桩功率仅23KW 比亚迪车主一度愧疚:把人家功率吸走了
- 又一五菱神车!宝骏悦也5月15日首发:车尾背个“大手表”
- iPhone平均售价越来越高了!Pro和Pro Max最受果粉喜爱
- 当前短讯!浙江师范大学2023年硕士研究生复试录取办法
- seventeen是哪个公司?seventeen在韩国是几线?seventeen有几个人?
- 冰淇淋和冰激凌区别是什么?明胶在冰淇淋中的作用是什么?
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
环球即时:调试器是个大骗子!
我叫GDB,是一个调试器,程序员通过我可以调试他们编写的软件,分析其中的bug。
作为一个调试器,调试分析是我的看家本领,像是给目标进程设置断点,或者让它单步执行,又或是查看进程中的变量、内存数据、CPU的寄存等等操作,我都手到擒来。
(资料图)
你只要输入对应的命令,我就能帮助你调试你的程序。
我之所以有这些本事,都得归功于一个强大的系统函数,它的名字叫ptrace。
不管是开始调试进程,还是下断点、读写进程数据、读写寄存器,我都是通过这个函数来进行,要是没了它,我可就废了。
它的第一个参数是一个枚举型的变量,表示要执行的操作,我支持的调试命令很多都是靠它来实现的:
你可以通过我来启动一个新的进程调试,我会使用fork创建出一个新的子进程,然后在子进程中通过execv来执行你指定的程序。
不过在执行你的程序之前,我会在子进程中调用ptrace函数,然后指定第一个参数为PTRACE_TRACEME,这样一来,我就能监控子进程中发生的事情了,也才能对你指定的程序进行调试。
你也可以让我attach到一个已经运行的进程分析,这样的话,我直接调用ptrace函数,并且指定第一个参数为PTRACE_ATTACH就可以了,然后我就会变成那个进程的父进程。
具体要选择哪种方式来调试,这就看你的需要了。不过不管哪种方式,最终我都会“接管”被调试的进程,它里面发生的各种信号事件我都能得到通知,方便我对它进行调试操作。
软件断点作为一个调试器,最常用的功能就是给程序下断点了。
你可以通过break命令告诉我,你要在程序的哪个位置添加断点。
当我收到你的命令之后,我会偷偷把被调试进程中那个位置的指令修改为一个0xCC,这是一条特殊指令的CPU机器码——int 3,是x86架构CPU专门用来支持调试的指令。
我的这个修改是偷偷进行的,你如果通过我来查看被调试进程的内存数据,或者在反汇编窗口查看那里的指令,会发现跟之前一样,这其实是我使的障眼法,让你看起来还是原来的数据,实际上已经被我修改过了,你要是不信,你可以另外写个程序来查看那里的数据内容,看看我说的是不是真的。
一旦被调试的进程运行到那个位置,CPU执行这条特殊的指令时,会陷入内核态,然后取出中断描述符表IDT中的3号表项中的处理函数来执行。
IDT中的内容,操作系统一启动早就安排好了,所以系统内核会拿到CPU的执行权,随后内核会发送一个SIGTRAP信号给到被调试的进程。
而因为我的存在,这个信号会被我截获,我收到以后会检查一下是不是程序员之前下的断点,如果是的话,就会显示断点触发了,然后等待程序员的下一步指示。
在没有下一步指示之前,被调试的进程都不会进入就绪队列被调度执行。
直到你使用continue命令告诉我继续,我再偷偷把替换成int 3的指令恢复,然后我再次调用ptrace函数告诉操作系统让它继续运行。
这就是我给程序下断点的秘密。
不知道你有没有发现一个问题,当我把替换的指令恢复后让它继续运行,以后就再也不会中断在这里了,可程序员并没有撤销这个断点,而是希望每次执行到这里都能中断,这可怎么办呢?
我有一个非常巧妙的办法,就是让它单步执行,只执行一条指令,然后又会中断到我这里,但这时候我并不会通知程序员,而仅仅是把刚才恢复的断点又给打上(替换指令),然后就继续运行。这一切都发生的神不知鬼不觉,程序员根本察觉不到。
单步调试说到单步执行,应该算是程序员调试程序的时候除了下断点之外最常见的操作了,每一次只让被调试的进程运行一条指令,这样方便跟踪排查问题。
你可能很好奇我是如何让它单步执行的呢?
单步执行的实现可比下断点简单多了,我不用去修改被调试进程内存中的指令,只需要调用ptrace函数,传递一个PTRACE_SINGLESTEP参数就行了,操作系统会自动把它设置为单步执行的模式。
我也很好奇操作系统是怎么办到的,就去打听了一下。
原来x86架构CPU有一个标志寄存器,名叫eflags,它里面不止包含了程序运行的一些状态,还有一些工作模式的设定。
其中就有一个TF标记,用来告诉CPU进入单步执行模式,只要把这个标记为设置为1,CPU每执行一条指令,就会触发一次调试异常,调试异常的向量号是1,所以触发的时候,都会取出IDT中的1号表项中的处理函数来执行。
接下来的事情就跟命中断点差不多了,我会截获到内核发给被调试进程的SIGTRAP信号,然后等待程序员的下一步指令。
如果你继续进行单步调试,那我便继续重复这个过程。
如果你有程序的源代码,你还可以进行源码级别的单步调试,不过这里的单步就指的是源代码中的一行了。
这种情况下要稍微麻烦一点,我还要分析出每一行代码对应的指令有哪些,然后用上面说的单步执行指令的方法,一条条指令快速掠过,直到这一行代码对应的指令都执行完成。
内存断点有的时候,直接给程序中代码的位置下断点并不能包治百病。比如程序员发现某个内存地址的内容老是莫名其妙被修改,想知道到底是哪个函数干的,这时候连地址都没有,根本没法下断点。
单步执行也不行,那么多条指令,得执行到猴年马月去才能找到?
不用担心,我可以帮你解决这个烦恼。
你可以通过watch命令告诉我,让我监视被调试进程中某个内存地址的数据变化,一旦发现被修改,我都会把它给停下来报告给你。
猜猜我是如何做到的呢?
我可以用单步执行的方式,每执行一步,就检查一下内容有没有没修改,一旦发现就停下来通知你们程序员。
不过这种方式实在是太麻烦了,会严重拖垮被调试进程的性能。
好在x86架构的CPU提供了硬件断点的能力,帮我解决了大问题。
在x86架构CPU的内部内置了一组调试寄存器,从DR0到DR7,总共8个。通过在DR0-DR3中设置要监控的内存地址,然后在DR7中设置要监控的模式,是读还是写,剩下的交给CPU就好了。
CPU执行的时候,一旦发现有符合调试寄存器中设置的情况发生时,就会产生调试异常,然后取出IDT中的1号表项中的处理函数来执行,接下来的事情就跟单步调试产生的异常差不多了。
CPU内部依靠硬件电路来完成监控,可比我们软件一条一条的检查快多了!
现在,你不止可以使用watch命令来监控内存被修改,还可以使用rwatch、awatch命令来告诉我去监控内存被读或者被写。
我叫GDB,是你调试程序的好伙伴,现在你该知道我是如何工作的了吧!
【完】
这里是编程技术宇宙,一个专注用故事分享硬核又有趣计算机知识的公众号~
觉得不错的话,欢迎一键三连哦~
关键词:
环球即时:调试器是个大骗子!
快速高效的C#FTP文件传输库FluentFTP|全球速讯
开心档之MySQL 导入数据-焦点报道
开封市通许县四所楼镇:让社情民意联络点当好民声传话筒|全球快讯
支持华为HMS服务!酷比魔方Pad 50Pro发布 首发899元
世界热点评!陌陌被苹果下架 官方回应:技术问题正解决 老用户不影响
这五一超20万人去淄博:鲁C变身网红旅游名城_快资讯
当前讯息:怎么看?老人欲插队被服务员严词拒绝:前有插队婆孙被网曝 还被做车贴很恶心
功能不成熟 马斯克推特直播秒变马赛克 网友吐槽:8-Bit埃隆_世界新要闻
今年全国快递业务量突破400亿件
常用的热门 API 汇总 环球热推荐
即时看!jasperreport开发手册--ireport教程
世界百事通!什么是EMR?为什么要以电子病历(EMR)为核心,建设医院信息集成平台?
安全验证必备——语音验证码短信 API 当前快看
火山引擎 DataTester 上线全新 MAB 智能调优实验
坎普斯boss怎么打_坎普斯怎么打_当前快讯
一机多用:劲能电钻/电动螺丝刀39元起(100元大额券) 每日速递
【天天热闻】向华为供货740万块硬盘 被重罚3亿美元!希捷:已和解并开始付罚金
当前观点:特斯拉公共充电桩功率仅23KW 比亚迪车主一度愧疚:把人家功率吸走了
又一五菱神车!宝骏悦也5月15日首发:车尾背个“大手表”
iPhone平均售价越来越高了!Pro和Pro Max最受果粉喜爱
当前短讯!浙江师范大学2023年硕士研究生复试录取办法
seventeen是哪个公司?seventeen在韩国是几线?seventeen有几个人?
冰淇淋和冰激凌区别是什么?明胶在冰淇淋中的作用是什么?
厨师的高帽子叫什么?为什么厨师要戴白色高帽子?
梦华录里的西京是哪里?梦华录是在哪些地方取景?
富士山在日本的哪里?富士山是私人的吗?富士山为什么是私人的?
boot priority是什么意思?boot priority怎么设置?
小米3s什么时候上市的?小米3s参数配置
百度网盘邀请码怎么使用?百度网盘邀请码大全
辽篮回沈阳!全员餐厅吃饭,张镇麟狂笑,莫兰德搞怪,回去仍加练-今亮点
centos7安装oracle11g11.2.0.4.0
【解决办法】三层交换机通过静态路由和接口互联,实现不同VLAN间通信的两种方法
ES全文检索,Neo4J,activiti审批流的知识库管理系统
thinkpad扩展坞接口怎么用?thinkpad的扩展坞有什么用?
移动磁盘无法写入文件怎么回事?移动磁盘无法写入文件怎么解决?
调查显示:电影“五一”档女性观众购票用户首次突破六成
699元 70迈4K旗舰行车记录仪A810发布:首发索尼IMX678_环球热头条
祝融号有重大发现:火星低纬度存在液态水
联想小新K3机械键盘发布:199元 91键小而全
天天头条:国内油价有望怒跌超3毛!基本抵消掉第八轮的微涨4毛
热血又感人!海外影迷评《长空之王》:5岁儿子非常喜欢
有景区免费发冰棍,有景区一盘炒鸡蛋48元——记者调查五一小长假山西景区旅游现状
当前关注:Zabbix“专家坐诊”第190期问答汇总
Linux IMX6ULL RTC掉电不保存问题解决|全球快报
苏宁零钱宝在哪里查看_苏宁零钱宝 环球看点
小记者手抄报 赛场小记者手抄报
放心买吧!最新研究:电动车电池比车本身更耐用|天天微资讯
真我11系列来了:2亿新影像 支持多焦段无损变焦
视点!小米13 Ultra全新限量定制色成了!雷军称特别多人喜欢 非常意外
赔钱卖车?福特汽车加入价格战 电动车利润率-102%
7人吃自助4小时炫300多个螃蟹 还有四五十盒榴莲等:网友直呼厉害_环球热讯
『徐州味·旅游季』料足滋味长 天天热头条
ios证书免费分享
滚动:【财经分析】清洁能源基础设施REITs发展空间广阔 应高度重视项目前期培育
天天快看:3699元起!联想小新mini主机上市:13代酷睿标压处理器加持
全球快报:全球多地出现罕见高温!厄尔尼诺或将带来全球变暖新高峰
秒杀安卓所有!苹果发财报:iPhone全球卖爆 营收历史新高 库克感谢国人|全球焦点
环球即时:演员张智霖在线求华为Mate X3息屏显示长开 华为李小龙回应
世界今热点:政策多管齐下撬动农村大市场
工银国际对美联储5月FOMC点评:加息“暂停” 降息“未定” 环球实时
【财经分析】欧洲央行最激进的货币紧缩周期将进入尾声_焦点信息
今热点:厂里不签合同还扣工资
欧盟警告苹果不准加密USB-C接口:必须兼容安卓数据线/充电器 否则禁售-快报
vivo X90S曝光:处理器升级为天玑9200+ 安卓最强芯-新要闻
男子误把每月汇款当捐款 4年收到24万竟是工资引热议:专家喊话薪酬透明化
世界看点:学系统集成项目管理工程师(中项)系列17b_范围管理(下)
淄博鸭头小哥直播中气到落泪:被女粉骚扰 1天18万人逛仅卖6千元-观察
当前关注:孝敬父母事迹(关于孝敬父母的名言)
【解决方法】调整CRT终端窗口的配色,透明度,标题栏内容,并自定义配色
销量火爆!AMD 12nm Zen+锐龙APU重出江湖:专供中国 热推荐
注意!一种藏在厨房的致癌物 很多人都忽略了 天天关注
给AI 100美元 让它去赚钱:结果真的“赚”大了 全球资讯
一款满足所有“X幻想”的App:消失4年 终于回来了_全球快看
天天速读:光荣使命ol进不去咋办_光荣使命ol进不去
支付宝转账被骗能追回_支付宝被骗了怎样能追回钱
贵州财经大学创新创业园:创业孵化助力青年创业“圆梦” 消息
重庆成立青年团员律师法律服务志愿队 将开展百场普法宣讲
环球新资讯:Exp6 MSF应用基础
环球微资讯!“世界上最难修的铁路”:青藏铁路将开行复兴号
西湖景区通报1500元打捞手机、日入一万:竟是自导自演-世界热点评
【全球聚看点】SK海力士中国工厂增产“落后”工艺:内存还要降价15%!
快资讯:日均充电车辆8700台次 湖南高速服务区护航“五一”绿色出行
cryptohack wp day(1)
关注特殊群体,市图书馆举办花园读书会活动_当前热闻
工资涨幅不到去年一半!三星员工威胁:或将发动历史性罢工-重点聚焦
暴雪游戏停服一百天:提交退款申请截至6月30日
世界观热点:Java 双指针项目中的实际应用
全球新动态:84.范围for
巴西媒体人:全球对美国货币政策不满与日俱增 美元国际吸引力大幅降低
热消息:【新华解读】2022年保险业风险可控 未来应提升自身“造血”能力
国产AI和ChatGPT的差距有多大?李彦宏:有可能能赶上 也有可能一直追不上 焦点资讯
为什么火锅里的金针菇叫“明天见”?了解一下几丁质 天天热头条
对标ChatGPT!李彦宏:文心一言已完成4次技术升级 大模型推理性能已提升近10倍
世界观察:vscode使用git推送代码
MarkDown学习
基于YOLOv4的目标检测系统(附MATLAB代码+GUI实现)
Java练手项目(尚硅谷的),不涉及框架,数据库等。
世界短讯!Python教程_编程入门自学教程_菜鸟教程-免费教程分享
华众车载(06830)获北汽奔驰新能源车产品订单 预测销售额约9亿元|世界今日讯