在python中使用gdb命令

2024-05-15 14:18:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在gdb中使用python脚本,但是我有一些问题,如何让这些命令的结果重定向到python脚本?在

我的意思是,当我在gdb中使用“infof”时,它将打印关于ebp的信息,eip信息。。。现在我想让这些信息不显示在屏幕上,而是重定向到variable。在

例如,在我的python脚本中,有一个名为“str1”的字符串,因此我需要str1=gdb.命令(“info f”),我尝试了一些方法,但是信息会显示在屏幕上,如何将其从屏幕上删除,只需将其存储在字符串中?在


Tags: 方法字符串命令info脚本信息屏幕variable
2条回答

下面是一个例子:

(gdb) info frame
Stack level 0, frame at 0x7fffffffd960:
 rip = 0x7ffff7dec680 in *__GI__dl_debug_state (dl-debug.c:77); saved rip 0x7ffff7de0731
 called by frame at 0x7fffffffdab0
 source language c.
 Arglist at 0x7fffffffd950, args: 
 Locals at 0x7fffffffd950, Previous frame's sp is 0x7fffffffd960
 Saved registers:
  rip at 0x7fffffffd958

(gdb) python str1 = gdb.execute("info frame", False, True)
(gdb) python print str1
Stack level 0, frame at 0x7fffffffd960:
 rip = 0x7ffff7dec680 in *__GI__dl_debug_state (dl-debug.c:77); saved rip 0x7ffff7de0731
 called by frame at 0x7fffffffdab0
 source language c.
 Arglist at 0x7fffffffd950, args: 
 Locals at 0x7fffffffd950, Previous frame's sp is 0x7fffffffd960
 Saved registers:
  rip at 0x7fffffffd958

文档here。在

gdb.execute (command [, from_tty [, to_string]])是你(we:D)想要的。你可以看看function decription。第一个参数是引用的GDB命令,第二个我并不真正理解,我想因为我不需要它,所以请保留它false。第三个决定命令输出流的位置。如果false(默认),它将被打印,如果true,输出将被包装为字符串并返回给您,因此您可以将其分配给一个变量。在

例如:

(gdb) py MyVar = gdb.execute("info f",False,True)
(gdb) py print(MyVar)
Stack level 0, frame at 0x7fffffffdda0:
 rip = 0x4006a6 in open@plt; saved rip 0x4007b9
 called by frame at 0x7fffffffddc0
 Arglist at 0x7fffffffdd90, args: 
 Locals at 0x7fffffffdd90, Previous frame's sp is 0x7fffffffdda0
 Saved registers:
  rip at 0x7fffffffdd98

(gdb) 

您可能还对gdb.parse_and_eval (expression)感兴趣。它提供了一种使用GDB的所谓便利变量的简单方法:

^{pr2}$

相关问题 更多 >