我们都用惯了图形界面的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
先将上面的值转化为2进制,修改从左边数第7位的值为0就可以了
>>> bin(0x246)
'0b1001000110'
>>> hex(0b1000000110)
'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
那怎么知道那个位在第几位呢
看下图就知道了
参考中南大学的一个课件:http://netclass.csu.edu.cn/NCourse/hep094/homepage/flags.htm