首页 > 其他分享 >GDB调试之寄存器查看与修改(六)

GDB调试之寄存器查看与修改(六)

时间:2024-01-13 12:45:29浏览次数:45  
标签:name 查看 int GDB 寄存器 test 调试

一、寄存器查看命令

命令:"i register"查看所有的寄存器,如果只想查看指定的寄存器,则使用"i r 寄存器名称",如"i r rdi",寄存器的名称列表如下所示:

函数参数低于六个的时候,会把参数放在寄存器中,当函数参数高于六个参数的时候,就不会把参数放在寄存器中,而是放在函数栈中。

调试代码如下所示:

调试代码下载地址

#include <iostream>
#include <cstring>
using namespace std;
struct test_struct
{
	char name[12];
	char gender;
	int age;
};
int test_fun(const char* name,int age,int gender)
{
	test_struct test;
	memset(&test,0,sizeof(test));
	strcpy(test.name,name);
	test.age = age;
	test.gender = gender;
	return 0;
}

int main(int argc,char** argv)
{
	test_fun("SimpleSoft",25,'m');

	return 0;
}

如果在编译的时候不添加-g参数,那么生成的程序将不会生成调试符号,所以我们在调试过程中,通过p命令或者别的命令去查看这个变量或者函数参数的话,将不会看到变量或者参数的值。

所以此时我们需要通过寄存器的方式去查看变量或者参数的值:

二、寄存器修改命令

pc/rip(program counter)寄存器,保存程序下一条要执行的指令,通过修改pc寄存器来改变程序执行的流程。修改寄存器的常用命令:

  • set var $pc=xxx
  • p $rip=xxx

查看源代码的汇编地址:"info line 行数"

比如上述代码执行到"return 0"后,想要从语句"memset(&test,0,sizeof(test))"重新向下执行,也可以通过修改寄存器中的汇编地址来达到这一操作:

标签:name,查看,int,GDB,寄存器,test,调试
From: https://www.cnblogs.com/TechNomad/p/17962223

相关文章

  • 如何使用谷歌浏览器 Chrome 更好地调试
    你的JavaScript是否曾经无法正确执行,并且你很难找出原因?你的CSS是否曾经表现得很奇怪,并且你很难找出原因或让它按预期显示?调试是编程的基本组成部分,也是所有软件开发人员的基本技能。当你构建网站和应用程序时,你很快就会意识到调试会占用大量时间。因此,学习任何可以帮助你更......
  • 工作四年,我学会了用 Idea本地调试线上测试服务器代码
    工作四年,我学会了用Idea本地调试线上测试服务器代码工作四年,我学会了用Idea本地调试线上测试服务器代码......
  • 浅谈医院配电能效监管系统设计与调试
    摘要:本文以医院能源监管系统为研究对象,采用智能化技术组建数据库、构建智能化的能耗信息管理系统,实现对医院的能源利用状况进行实时、准确的动态监管。具体而言,该系统建设的主要功能是对医院的能源消耗进行采集、上报、汇总与分析,并生成动态的数据和报表曲线,以及利用分析后的......
  • GDB调试之变量查看与修改
    一、查看函数参数调试代码下载地址使用命令"p 参数名称"可以查看指定参数的值,如果想一次性查看函数的所有参数,可以使用命令"infoargs"或者"iargs"即可。代码中有一个test_work函数,在这个函数处设置一个断点,然后查看此函数的参数信息:二、查看变量的值三、设置字符串的显......
  • 调试再次出错
    积累了调试的好多经验和反想,可无济于事。遇到问题最怕想当然,如果自己心思缜密,百无一疏也就罢了。可不能无时无刻保持这种警惕性:遇到问题,需要调试最好一步步来:1.描述问题:具体,针对性的问题,说出问题发出所在,问题是什么?2.调试的时候,针对性的调试,什么情况下出现的问题,就在什......
  • VisualStudio — 调试运行时启动缓慢
    VisualStudio在Debug模式下,调试程序时运行,程序启动极其缓慢,VS最下面的状态栏一直显示不停的在加载XXX.dll,但是如果选择开始执行(不调试)程序就能很快启动,排查到的原因是调试时,之前添加了microsoft.com的环境变量:SRV*D:\mysymbol*https://msdl.microsoft.com/download/sy......
  • 全志T113开发板Qt远程调试
    1引言通常情况下工程师在调试Qt程序时,需要频繁制作镜像烧录到核心板来测试Qt程序是否完善,这样的操作既费时又费力。这时我们可以通过QtCreator设备功能,定义设备后,在x86_64虚拟机上交叉编译qt程序,将程序远程部署到arm64的机子上,然后远程调试,大大提高开发效率。2. 调试环境本文基于H......
  • 全志T113开发板Qt远程调试
    1引言 通常情况下工程师在调试Qt程序时,需要频繁制作镜像烧录到核心板来测试Qt程序是否完善,这样的操作既费时又费力。这时我们可以通过QtCreator设备功能,定义设备后,在x86_64虚拟机上交叉编译qt程序,将程序远程部署到arm64的机子上,然后远程调试,大大提高开发效率。  2. 调试......
  • Xcode14.3.1真机调试iOS17的方法
    Hello,大家好我是咕噜铁蛋!Xcode是苹果官方开发工具,它提供了完整的开发环境和工具集,支持开发iOS、macOS、watchOS和tvOS应用程序。对于iOS开发者来说,Xcode是必备的工具之一。而随着iOS系统的不断更新和升级,Xcode也在不断地升级和改进,确保最好的开发体验。今天铁蛋将介绍如......
  • proteus8 单步调试stm32 外置arm gcc
    10年前proteus7的时代,51单片机就已经可以用keil和proteus联调了,单步调试,像连接了一个jtag调试口一样。proteus官方提供的keil调试器驱动有arm设备,不过我反复尝试,虽然识别到ProteusVSMSimulator设备和端口,但是还是报错,无法成功。本文只是借助proteus内置的编辑器和单步调试器,......