栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

【无标题】Linux下C程序gdb调试

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【无标题】Linux下C程序gdb调试

Linux下C程序gdb调试

  • Linux系统下,更改PC寄存器值
  1. PC寄存器:操作系统中的程序计数器。它指示了当前CPU将要读取指令的地址(即将执行的地址,即下一条指令)。
  2. 在gdb调试中,可通过更改PC寄存器的值

PC寄存器会存储程序下一条要执行的指令,通过修改这个寄存器的值,可以达到改变程序执行流程的目的。(有时候在gdb调试中,可能会用到跳转到某行代码行来执行)。

  1. 下面介绍一下如何通过修改PC寄存器的值,改变程序执行流程。

例如如下代码所示(test.c):

#include

int main(void)

{       

        int a =0;               

        a++;    

        a++;    

        printf("%dn", a);      

        return 0;

}

1. 首先,编译test.c文件,ubuntu终端输入命令:gcc -g test.c -o test,即可生成test可执行程序。

 

2. 其次,ubuntu终端输入gdb -q + 可执行文件,启动gdb进行调试:(-q参数可以屏蔽一些gdb版本等相关信息,使得页面看起来干净些(我用了),至此gdb启动完毕

gdb hello

或

gdb -q hello

3. 然后,终端输入start命令:如下所示:

4. 程序从main函数中,第一个大括号开始运行。

info line 4命令:查看第4行代码的汇编指令起始地址。

p $pc命令:查看PC寄存器的值。

第4行的代码的汇编指令起始地址 = PC寄存器的值,则说明第4行代码还未执行。

5. 第6行,也未执行,同上,第六行代码对应的汇编指令起始地址为0x55555555515c,再通过命令p $pc查看PC寄存器的值0x55555555515c,两个值相等,说明程序即将执行第六行的第一个“a++”;  

6. 输入命令info line 7,查看第7行“a++”代码对应汇编地址起始地址为0x555555555160。

输入命令set var $pc=0x555555555160,即将PC寄存器设置为第7行代码对应的汇编指令地址。

 

接下来执行,可以看到程序输出“a=1”,也就是跳过了第一条“a++;” 语句。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/894299.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号