当前位置: 技术问答>linux和unix
如何把gdb 的输出作进一步处理?
来源: 互联网 发布时间:2016-04-05
本文导语: 我想把gdb的输出作进一步处理,比如 ========================================== (gdb) info register eflags eflags 0x282 642 (gdb) ========================================== 这个eflags 虽然打印出来了,但是查看各具体标志极为麻烦...
我想把gdb的输出作进一步处理,比如
==========================================
(gdb) info register eflags
eflags 0x282 642
(gdb)
==========================================
这个eflags 虽然打印出来了,但是查看各具体标志极为麻烦,我想从这个标志中提取出比如说,
ZF=? CF=? 等等更人性化一点的输出方式来.
我想是不是可以用shell 命令作进一步处理,但是类似于, info register eflags | cut -f2 之类的命令是不被
支持的,如果用函数调用 shell("command") ,又不能处理info register eflags 的输出,
请问有什么办法, 我的最终目的就是要输出,类似于
ZF=? CF=? SF=? 等等比较人性化的输出来.
有解决方案者立即送分.
==========================================
(gdb) info register eflags
eflags 0x282 642
(gdb)
==========================================
这个eflags 虽然打印出来了,但是查看各具体标志极为麻烦,我想从这个标志中提取出比如说,
ZF=? CF=? 等等更人性化一点的输出方式来.
我想是不是可以用shell 命令作进一步处理,但是类似于, info register eflags | cut -f2 之类的命令是不被
支持的,如果用函数调用 shell("command") ,又不能处理info register eflags 的输出,
请问有什么办法, 我的最终目的就是要输出,类似于
ZF=? CF=? SF=? 等等比较人性化的输出来.
有解决方案者立即送分.
|
在你的用户目录下创建文件 .gdbinit
加入下面的几行:
define eflags
printf " OF DF IF TF ",
(($eflags >> 0xB) & 1 ), (($eflags >> 0xA) & 1 ),
(($eflags >> 9) & 1 ), (($eflags >> 8) & 1 )
printf " SF ZF AF PF CF n",
(($eflags >> 7) & 1 ), (($eflags >> 6) & 1 ),
(($eflags >> 4) & 1 ), (($eflags >> 2) & 1 ), ($eflags & 1)
printf " ID VIP VIF AC ",
(($eflags >> 0x15) & 1 ), (($eflags >> 0x14) & 1 ),
(($eflags >> 0x13) & 1 ), (($eflags >> 0x12) & 1 )
printf " VM RF NT IOPL n",
(($eflags >> 0x11) & 1 ), (($eflags >> 0x10) & 1 ),
(($eflags >> 0xE) & 1 ), (($eflags >> 0xC) & 3 )
end
document eflags
Print entire eflags register
end
以后使用gdb的时候,直接运行eflags:
(gdb) eflags
OF DF IF TF SF ZF AF PF CF
ID VIP VIF AC VM RF NT IOPL
加入下面的几行:
define eflags
printf " OF DF IF TF ",
(($eflags >> 0xB) & 1 ), (($eflags >> 0xA) & 1 ),
(($eflags >> 9) & 1 ), (($eflags >> 8) & 1 )
printf " SF ZF AF PF CF n",
(($eflags >> 7) & 1 ), (($eflags >> 6) & 1 ),
(($eflags >> 4) & 1 ), (($eflags >> 2) & 1 ), ($eflags & 1)
printf " ID VIP VIF AC ",
(($eflags >> 0x15) & 1 ), (($eflags >> 0x14) & 1 ),
(($eflags >> 0x13) & 1 ), (($eflags >> 0x12) & 1 )
printf " VM RF NT IOPL n",
(($eflags >> 0x11) & 1 ), (($eflags >> 0x10) & 1 ),
(($eflags >> 0xE) & 1 ), (($eflags >> 0xC) & 3 )
end
document eflags
Print entire eflags register
end
以后使用gdb的时候,直接运行eflags:
(gdb) eflags
OF DF IF TF SF ZF AF PF CF
ID VIP VIF AC VM RF NT IOPL