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,它们是等价的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2020-01-18 linux环境下时区无法设置(Asia/Shanghai (UTC, 0000))的问题解决
2020-01-18 Python Inotify 监视LINUX文件系统事件