使用gdb修改寄存器中的内容

再没有进程debug信息的情况下,不能直接使用变量名称修改变量的值,这时可以通过变量的寄存器,修改变量的值。



1、先将需要修改的函数反汇编,找到需要修改的变量的寄存器,例如 edx寄存器

2、gdb命令

gdb attach `ps -ef | grep proc | grep 进程名称 | awk '{print $2}'`
set height 0
handle SIG36 SIGUSR2 noprint nostop 
b *0x00e90d10   //反汇编需要修改寄存器的前一行
c
set $edx = 0x6   //修改寄存器的值
p $edx
bt
c


注意:
1、有些寄存器变量貌似不能修改,比如%rdi,使用gdb修改就会发生复位。
2、没有debug信息的函数中没有办法使用变量的方式赋值,比如set  age= 253,会提示找不到符号


补充:

第二种方式:
gdb attach `ps -ef | grep proc | grep bsu | awk '{print $2}'`
set height 0
handle SIG36 SIGUSR2 noprint nostop 
b *0x00e90d10
c
p $rsp+0x714

获取到寄存器的位置后,将该地址修改为0x6
set *0x7f962c1fa564 = 0x6
c

你可能感兴趣的:(json,gdb)