一、寄存器查看命令
命令:"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