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