GDB调试技巧实战--找到打开某个文件的地方

news2024/11/16 15:41:27

问题:

本系列期望用一个简单的实例来展示一些调试技巧。不时更新。
本期问题是:如何才能快速定位到打开某个文件的代码?(对应open/fopen, 读者可举一反三到其它系统函数)。当面对屎山代码时,GDB的条件断点也许能帮你从成百上千个open/fopen调用中快速锁定到目标。

思路:

如果有代码,当然可以直接搜关键字(文件名),如果关键字不好搜那就不如GDB调试来的快,这儿我们只着重讲GDB的办法。显然就是在open或fopen上下条件断点,条件就是比较正要打开的文件是否是我们要关注的(下面假设文件名为“bb”).
巧合的是open/fopen的第一个参数都是要打开的文件名,所以问题就变成了比较两个字符串,第一个是open/fopen的第一个参数,第二个是“bb”. 在x86_64平台上,函数的第一个参数用寄存器rdi来传递,
在这里插入图片描述

故条件断点大概为:

b fopen if 比较($rdi, "bb")
b open if 比较($rdi, "bb")

为便于调试,先写个简单的程序

#include<stdio.h>
#include<stdlib.h>

//2021/1/1
//mzhai
//test for GDB conditional break
int main(int argc, char* argv[])
{
	char str[]="hello";
	printf("sizeof(str)=%d\n", sizeof(str));

	fopen("aa","r");
	printf("after aa\n");
	fopen("bb","r");
	printf("end\n");

}

第一种办法:

比较字符串,第一想法就是调用strcmp

[mzhai]$ gdb a.out
(gdb)  b fopen if strcmp($rdi,"bb")==0
No symbol "strcmp" in current context.
(gdb) b main
Breakpoint 1 at 0x4005bc: file test.c, line 7.
(gdb) r
(gdb)  b fopen if strcmp($rdi,"bb")==0
Breakpoint 2 at 0x4004a0
(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x00000000004005bc in main at test.c:7
        breakpoint already hit 1 time
2       breakpoint     keep y   0x00000000004004a0 <fopen@plt>
        stop only if strcmp($rdi,"bb")==0
(gdb) c
Continuing.
sizeof(str)=6
after aa

Breakpoint 2, 0x00000000004004a0 in fopen@plt ()

完美跳过了第一个fopen. 不过要注意程序运行后才会加在libc才能用strcmp, 这也是一开始出现No symbol “strcmp” in current context.的原因。

第二种:

除了使用libc库里的strcmp,GDB也提供了比较字符串的内部函数_streq, GDB叫convenience function, 可以在GDB中查看器帮助文档。

(gdb) help function
Placeholder command for showing help on convenience functions.

List of function subcommands:

function _memeq -- $_memeq - compare bytes of memory
function _regex -- $_regex - check if a string matches a regular expression
function _streq -- $_streq - check string equality
function _strlen -- $_strlen - compute string length
function caller_is -- Return True if the calling function's name is equal to a string
function caller_matches -- Return True if the calling function's name matches a string
function in_scope -- Return True if all the given variables or macros are in scope

实践如下:

(gdb) b fopen if $_streq((char*)$rdi,"bb")
Breakpoint 1 at 0x4004a0
(gdb) r
Starting program: /home/mzhai/cprograms/a.out
sizeof(str)=6
after aa

Breakpoint 1, 0x00000000004004a0 in fopen@plt ()
Missing separate debuginfos, use: debuginfo-install glibc-2.17-260.el7.x86_64

推荐第二种。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/140466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于R的Bilibili视频数据建模及分析——变量相关性分析篇

基于R的Bilibili视频数据建模及分析——变量相关性分析篇 文章目录基于R的Bilibili视频数据建模及分析——变量相关性分析篇0、写在前面1、数据分析1.1 变量相关性分析1.2 单元数据直观展示1.3 多元数据直观展示2、多元数据与回归分析2.1 简单相关分析2.2 简单线性回归分析2.3 …

从0到1搭建大数据平台之调度系统

大家好&#xff0c;我是脚丫先生 (o^^o) 大数据平台核心之一在于数据计算&#xff0c;分为离线计算和实时计算任务。 然而任务是离不开调度的。比如&#xff1a;我们要进行定时抽取业务数据库 的数据&#xff0c;定时跑hive/spark任务&#xff0c;定时推送日报、月报指标数据…

数字档案馆系统测试前准备工作(“指标表”和“具体要求”可下载)

数字档案馆系统测试是国家档案局组织开展的一项针对县级以上国家综合档案馆数字档案馆建设情况的绩效评价工作。数字档案馆系统测试的评分依据是《数字档案馆系统测试指标表》&#xff08;后台回复“指标表”可下载&#xff09;&#xff0c;测试采用百分制。测试结果达到80分以…

华脉智联电力行业技术解决方案

一、前言 所谓电力应急&#xff0c;就是快速处理突发紧急事件尽量减少因供电中断造成的损失&#xff0c;快速修复故障设备或线路&#xff0c;使电力生产和运营恢复正常。重大施工事故、公共紧急事件、性质恶劣的违章操作、蓄意破坏、自然灾害等&#xff0c;都极易引发大规模停…

论文浅尝 | Future Event Prediction Based on Temporal KG Embedding

笔记整理&#xff1a;杨露露&#xff0c;天津大学硕士链接&#xff1a;https://www.techscience.com/csse/v44n3/49146/html动机对未来事件的准确预测在许多领域为社会带来巨大利益&#xff0c;减少损失&#xff0c;如内乱、流行病和犯罪。知识图谱是描述和建模复杂系统的通用语…

【状态估计】将变压器和LSTM与卡尔曼滤波器结合到EM算法中进行状态估计(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

讨教大学|六西格玛之属性值数据一致性分析

相信大家在日常的工作中肯定会遇到这样一种情况&#xff1a;产品的质量特性属于外观特性&#xff0c;即 需要靠人工判断产品是不是符合标准。当遇到客户投诉&#xff0c;或者内部报废率比较高的时候&#xff0c;经 常会遇到客户和领导的挑战&#xff1a; 如何保证员工清楚的知…

IO、NIO、BIO傻傻分不清吗,让我对象告诉你~~

1、Stream 与 Channel stream 不会自动缓冲数据&#xff0c;channel 会利用系统提供的发送缓冲区、接收缓冲区&#xff08;更为底层&#xff09;stream 仅支持阻塞 API&#xff0c;channel 同时支持阻塞、非阻塞 API&#xff0c;网络 channel 可配合 selector 实现多路复用二者…

电商系统概要设计

设计一个最小化的电商系统&#xff0c;理清楚电商系统的架构。目前唯一能确定的是&#xff0c;老板要做一个电商系统。具体做成什么样&#xff0c;还不清楚。你需要和老板讨论需求。 你&#xff1a;“咱们要做的业务模式是C2C、B2C还是B2B呢&#xff1f;” 老板&#xff1a;“…

CES 2023:NVIDIA发力元宇宙与汽车市场

作为全球规模最大、影响最为广泛的国际消费电子展&#xff0c;2023年的CES&#xff08;Consumer Electronics Show&#xff09;在美国拉斯维加斯如约而至。众所周知&#xff0c;作为全球消费电子产业发展的风向标&#xff0c;每年的CES都汇聚了各大科技企业最先进的技术与产品。…

Renesas setting-文件导入

导入工程 1.1, 文件\从文件系统选中打开项目… 1.2, 打开xpg_app文件 链接文件 2.1&#xff0c;选中项目\右键\属性 2.2&#xff0c;删除文件&#xff08;在不同电脑中绝对路径不同&#xff09; 属性\路径和符号&#xff0c; 源位置&#xff08;delete C 文件&#xff09;&…

在未联网的计算机中部署 yum 源和 EPICS 环境

1. 基本背景 EPICS 软件仓库&#xff1a;192.168.206.234:8888 安装方式&#xff1a;yum 2. 配置跳板机 跳板机功能&#xff1a;借助ssh 隧道服务进行端口转发&#xff0c;使未联网的计算机能够访问软件仓库。 将未联网的计算机与一台申请了无线校园网的笔记本电脑进行有线…

PCB结构和谐振(一)

本文构建了包括不同的旋转角度、不同的叠层和两种不同布线方法&#xff08;W 形和蛇形线&#xff09;的测试手段&#xff0c;对应于这些设计的谐振是通过 VNA 测量获得的。然后&#xff0c;使用仿真方法来帮助我们理解这些实验结果。为了消除仿真与实验之间的差异&#xff0c;研…

【chatGPT】一位聊天永远秒回的朋友

目录一、chatGPT介绍二、通过猿如意体验三、在openAI官网体验2.1注册openAI2.2使用和问题说明一、chatGPT介绍 ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型&#xff0c;一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的…

债务豁免,只是中昌数据的一次“回光返照”?

‍‍数据智能产业创新服务媒体——聚焦数智 改变商业因为经营不善&#xff0c;中昌大数据股份有限公司&#xff08;以下简称“中昌数据”&#xff09;已被实施退市风险警示&#xff0c;1月3日&#xff0c;中昌数据发布公告称收到两位债权人的《债务豁免函》&#xff0c;对中昌…

线程安全中的原子性,有序性和可见性

对于Java并发编程&#xff0c;一般来说有以下的关注点&#xff1a; 线程安全性&#xff0c;正确性。 线程的活跃性(死锁&#xff0c;活锁) 性能 其中线程的安全性问题是首要解决的问题&#xff0c;线程不安全&#xff0c;运行出来的结果和预期不一致&#xff0c;那就连基本要…

计算机的发展史与计算机硬件组成

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.计算机的发展史 1.计算机发展的四个时代 二.计算机硬件组成 …

#D. Journey之二

一,题目Description给出一棵树N个点及数字K接下来N-1行描述有关边的开始点&#xff0c;结束点.保证图中不会有环接下来K个数字&#xff0c;代表你要走过的点的编号.当然你可以自己选择出发点及行进的路线不一定按给定编号顺序前行,求走过的最短距离。FormatInput第一行给出N,K。…

工具及方法 - 文件正在被使用,无法改名或删除怎么办

有时我们想重命名或删除一个文件时&#xff0c;会提示错误&#xff0c;提示文件被占用。 比如提示&#xff1a;“The action can’t be completed because the folder is open in another program“。 或者&#xff1a; 或者&#xff1a; 就是因为有进程锁定(process is lock…

004-Ensp-实验-配置DNS

实验要求 1. 在PC2中Ping www.pc1.com 可以访问到PC2 2. 在PC1中Ping www.pc2.com 可以访问到PC2 网络结构 实验步骤 #需要开启DHCP [Huawei]interface g0/0/0 [Huawei-GigabitEthernet0/0/0]dhcp server dns-list 192.168.0.100 测试