gdb修改标志位的值

    xiaoxiao2021-03-25  110

    我们都用惯了图形界面的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

    转载请注明原文地址: https://ju.6miu.com/read-9039.html

    最新回复(0)