GDB 修改当前判断函数的返回值(即修改寄存器的值)的方法
工作中遇到的问题:
在GDB调试时要进入下边该判断后边的函数,而m_EtherDecode.Chk_MakeSure_IP_Pkt(pPacket,dwPacketLen)的返回值是false,所以需要修改该函数的返回值,
-------------------------------------------------------------------------------------------------------------------------------------
if(TRUE== m_EtherDecode.Chk_MakeSure_IP_Pkt(pPacket,dwPacketLen))
{
}
else
{ //g_MdsLogEvent(RUNLOG,"Skip_Pkt_Seq:%d, pktlen:%d",g_nInPktSeq, dwPacketLen);
g_nPktFromEthDropCnt ++;
g_nL2NotIPTraffic += dwPacketLen;
if(m_EtherDecode.m_uiPtlOverMAC == PID_ETHERTYPE_IPV6)
{
g_nPktFromEthDropCnt_IpV6++;
}
return ;
}
-----------------------------------------------------------------------------------------------------------------------------------------
方法:
1,在调试到该函数时, s (step) 进入该判断条件函数;
2,disassemble ----反编译一下当前函数
3,i r (info registers) ----查看当前寄存器的值,主要是第一个,可能是eax,也可能是rax,,我的就是rax,,,记住是第一行寄存器里边存着的就是返回值;
4,寻找判断位置,在函数执行完时,查看寄存器的值,(函数体内) i r ;
5,在函数返回前,,,,当前行为---- } ,在此处修改寄存器的值, set $rax= 1 通过set命令修改寄存器的值,需要在寄存器前边加 字符$ ----一个shell 判断当前指向的标志
6,i f 修改完寄存器后查看修改情况;
7, n 或者 s 进入下一行调试,修改完成。
最新文章
- cf Round 603
- 论文笔记之:A CNN Cascade for Landmark Guided Semantic Part Segmentation
- Incorrect key file for table '/tmp/#sql_882_0.MYI'; try to repair it
- DHTML 教程学习进度备忘
- paip.Adblock屏蔽规则保存位置以及修理恢复
- ThinkPHP - 前置操作+后置操作
- 数据库 Mysql内容补充一
- 这是您一直期待的所有iOS 11功能的屏幕截图
- (转)linux中项目部署和日志查看
- ajaxStart()和ajaxStop()
- rabbitmq 出现 com.rabbitmq.client.ShutdownSignalException: , ..................
- Autowired(required=true)
- InstallShield 软件打包完整教程(含添加自定义依赖环境)
- laravel 关联中的预加载
- 什么是Copy-Only Backup? 为什么要用它?
- html5中script的async属性
- SQL Developer更改日期显示格式
- linux驱动开发---导出内核符号
- 开博第一篇,学习markdown
- MongoDB数据库 备份 还原
热门文章
- js 对象 copy 对象
- Leetcode 137. Single Number I/II/III
- VisualSVN Server搭建VDFS分布式仓研究(未成功)
- jQuery 仿百度输入标签插件
- Cloud Design Patterns Book Reading(undone)
- MATLAB自定义配置
- <;转>;iOS9 Day-by-Day:iOS开发者必须了解的iOS 9新技术与API
- oracle建表并设置ID为自动增长
- Docker探索系列2之镜像打包与DockerFile
- DNS(一)之禁用权威域名服务器递归解析