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

  • 相关阅读:
    核心编程笔记8——用户模式下的线程同步
    核心编程随笔7——线程调度和优先级
    深入浅出mfc随笔——MFc程序的生死因果
    opengl
    核心编程6——线程
    深入浅出mfc学习笔记——六大关键技术之仿真_运行时和动态创建
    深入浅出mfc学习笔记——六大关键技术仿真_Persistence(永久保存)
    Gdi+编程
    深入浅出mfc学习笔记1
    file open等待事件
  • 原文地址:https://www.cnblogs.com/the-tops/p/5694083.html
Copyright © 2011-2022 走看看