zoukankan      html  css  js  c++  java
  • 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        进入下一行调试,修改完成。

  • 相关阅读:
    Django缓存大总结
    Django之视图 ListView
    Django中间件之加载分析
    Django启动过程之超级详细分析
    Django中间件
    RabbitMq与Celery应用示意图
    爬虫的基本原理
    RestFramework的过滤组件 和 分页组件
    python注释、输入格式化输出输出及数据类型
    编程语言的发展历史及python的初了解
  • 原文地址:https://www.cnblogs.com/the-tops/p/5694083.html
Copyright © 2011-2022 走看看