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        进入下一行调试,修改完成。

  • 相关阅读:
    hdu (欧拉函数+容斥原理) GCD
    UVA 11624 Fire!
    drf框架之跨域问题的解决与缓存问题
    drf框架之分页器的用法
    DRF框架之 用户角色权限与访问频率的权限设置
    DRF框架之认证组件用法(第四天)
    DRF框架之视图方法的几个封装好的模块介绍(第三天)
    DRF框架之 serializers 序列化组件
    DRF框架简介(第一天)
    BBS(第三天) 如何吧用户上传的图片文件保存到本地
  • 原文地址:https://www.cnblogs.com/the-tops/p/5694083.html
Copyright © 2011-2022 走看看