• gdb修改标志位的值


    我们都用惯了图形界面的od啥的,但是假如我们要调试一台服务器上的程序


    我们想要改变程序执行流程,除了修改二进制程序中的二进制,还可以临时改变一下标志位,临时改变执行流程


    那用到什么命令呢

    命令就是我们经常用到的 set


    开始实践


    我们首先看看寄存器

    (gdb) i r
    eax            0x804b008	134524936
    ecx            0x4	4
    edx            0xbffff748	-1073744056
    ebx            0x2a8ff4	2789364
    esp            0xbffff760	0xbffff760
    ebp            0xbffff778	0xbffff778
    esi            0x804b008	134524936
    edi            0x80486e9	134514409
    eip            0x804842c	0x804842c <main+60>
    eflags         0x246	[ PF ZF IF ]
    cs             0x73	115
    ss             0x7b	123
    ds             0x7b	123
    es             0x7b	123
    fs             0x0	0
    gs             0x33	51


    发现标记寄存器也在上面,加入我们将ZF置为0,那怎么办呢,


    先将上面的值转化为2进制,修改从左边数第7位的值为0就可以了

    >>> bin(0x246)
    '0b1001000110'
    >>> hex(0b1000000110)
    '0x206'


    那我们设置为0x206看看
    (gdb) set $eflags=0x206
    (gdb) i r
    eax            0x804b008	134524936
    ecx            0x4	4
    edx            0xbffff748	-1073744056
    ebx            0x2a8ff4	2789364
    esp            0xbffff760	0xbffff760
    ebp            0xbffff778	0xbffff778
    esi            0x804b008	134524936
    edi            0x80486e9	134514409
    eip            0x804842c	0x804842c <main+60>
    eflags         0x206	[ PF IF ]
    cs             0x73	115
    ss             0x7b	123
    ds             0x7b	123
    es             0x7b	123
    fs             0x0	0
    gs             0x33	51
    


    果然去掉了ZF标志位


    那怎么知道那个位在第几位呢


    看下图就知道了



    参考中南大学的一个课件:http://netclass.csu.edu.cn/NCourse/hep094/homepage/flags.htm

  • 相关阅读:
    VBScript的参数引用
    异常处理规范
    测试感悟
    URL重写
    避免重复记录
    EJB 异常处理探试法
    EJB 异常处理的最佳做法(1)
    使用vbscript脚本调用web服务
    用Dom4j解析XML及中文问题
    lucene简介
  • 原文地址:https://www.cnblogs.com/cnsec/p/13286517.html
Copyright © 2020-2023  润新知