再没有进程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