10GDB修改寄存器

1. 修改寄存器,跳过某些行代码

 

 1)代码行10,要打断点的代码

2)代码行12,在行10下一步后,希望进入代码行12(跳过执行代码行11)
3)期望代码行13输出0(因为代码行10没有执行,所以c的值仍然为原始值)

4)在行10打断点
5)在程序run起来后,程序停在行10,查看行10的地址:i line 10
6)可以看到行10(待执行的代码行)的地址:0x4008a4
7)查看rip值(总是指向待执行的代码行):i r rip。
8)查看到的结果为 0x4008a4,说明rip确实指向了待执行的代码行10
9)查看代码行11地址:i line 11,查看到的结果为:0x4008af
10)修改rip的值,使之指向待执行代码行11:p $rip=0x4008af
11)查看rip的值:i r rip
12)查看到的结果为:0x4008af
13)执行下一步.
14)发现执行了代码行11,输出结果为123,停止在代码行12。
15)发现最后c的值并没有改变(因为跳过了代码行10的执行),还是初始值0。

 

2. 修改寄存器,重复执行某段代码

 

 1)第一次要设置断点的位置,代码行14

2)当程序运行到1(代码行14)时候,修改rip要指向的位置,代码行10
3)断点到代码行14
4)运行后,程序停在代码行14
5)修改a,b的值分别为100,200
6)查看行10的地址:0x4008a4
7)修改rip的指向地址:p $rip=0x4008a4,指向代码行10
8)查看rip的指向地址:结果为0x4008a4
9)下一步后,发现代码指向了行11,说明代码行10被执行,发现a, b, c的值分别发生了变动:100,200,300

 

另外:上面介绍的rip也可以写成pc,它们是等价的

posted @ 2022-01-18 15:10  邱明成  阅读(426)  评论(0编辑  收藏  举报