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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值