Используйте команду GDB в Python - PullRequest
3 голосов
/ 08 января 2012

Я хочу использовать скрипт Python в GDB, но у меня есть несколько вопросов, как я могу позволить перенаправить эти команды в мой скрипт Python?

Я имею в виду, что когда я использую "info f", в gdb он будет печатать информацию о ebp, eip infomation ... Пока я хочу, чтобы эта информация не отображалась на экране, ноперенаправить на переменную.

Например, в моем скрипте Python есть строка с именем "str1", поэтому я хочу, чтобы str1 = gdb.command ("info f"), я пытаюсь сделать это несколькими способами, но информация покажетна экране, как я могу удалить его с экрана, просто сохранить его в строку?

Ответы [ 2 ]

2 голосов
/ 08 января 2012

Вот пример:

(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

Документация здесь .

1 голос
/ 17 апреля 2014

gdb.execute (command [, from_tty [, to_string]]) - это то, что вы (мы: D) ищем.Вы можете посмотреть на описание функции .Первый аргумент цитируется команда 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 :

(gdb) set $MyVar = "PinkyPie is the best!"
(gdb) pi
>>> MyStr = gdb.parse_and_eval("$MyVar")
>>> print(MyStr)
"PinkyPie is the best!"
>>> 
(gdb) 
...